holgern/beem

Unable to set beneficiaries via steem.post()

Closed this issue · 0 comments

Expected behavior

steem.post() brings two options to set beneficiaries:

  • via a parameter comment_options in the form of:
            comment_options = {
                'max_accepted_payout': '1000000.000 SBD',
                'percent_steem_dollars': 10000,
                'allow_votes': True,
                'allow_curation_rewards': True,
                'extensions': [[0, {
                    'beneficiaries': [
                        {'account': 'account1', 'weight': 5000},
                        {'account': 'account2', 'weight': 5000},
                    ]}
                ]]
            }
  • via a parameter beneficiaries in the form of:
            beneficiaries = [
                {'account': 'account1', 'weight': 5000},
                {'account': 'account2', 'weight': 5000}
            ]

The list in beneficiaries is supposed to override the settings in the comment_options if both parameters are present.

Actual behavior

It is not possible to set beneficiaries using either method.

  1. via comment_options, dry run, creating an unsigned transaction that is not broadcasted:
from beem import Steem
import json

s = Steem(nobroadcast=True, unsigned=True)

comment_options = {
    'max_accepted_payout': '1000000.000 SBD',
    'percent_steem_dollars': 10000,
    'allow_votes': True,
    'allow_curation_rewards': True,
    'extensions': [[0, {
        'beneficiaries': [
            {'account': 'account1', 'weight': 5000},
            {'account': 'account2', 'weight': 5000},
        ]}
    ]]
}

tx = s.post(title="title", body="body", permlink="permlink",
            author="author", comment_options=comment_options,
            beneficiaries=None)

print(json.dumps(tx, indent=2))

Result:

[...]
    [
      "comment_options",
      {
        "author": "author",
        "permlink": "permlink",
        "max_accepted_payout": "1000000.000 SBD",
        "percent_steem_dollars": 10000,
        "allow_votes": true,
        "allow_curation_rewards": true,
        "extensions": []
      }
    ]

The resulting extensions field is empty, the post will be created but without beneficiaries.

  1. via the beneficiary parameter:
from beem import Steem
import cfg_stmdev as cfg
import time
import json

s = Steem(keys=[cfg.POSTING_WIF], nobroadcast=False)

comment_options = {
    'max_accepted_payout': '1000000.000 SBD',
    'percent_steem_dollars': 10000,
    'allow_votes': True,
    'allow_curation_rewards': True,
}

beneficiaries = [{'account': 'stmdev', 'weight': 1000}]

reply_identifier = '@stmdev/pwdtest'
timestamp = int(time.time())

permlink = 'reply-case-1-%s' % timestamp
body = "%s %s" % (comment_options, beneficiaries)
tx = s.post(title=permlink, body=body, permlink=permlink,
            author=cfg.ACCOUNT, reply_identifier=reply_identifier,
            comment_options=comment_options,
            beneficiaries=beneficiaries)

print(json.dumps(tx, indent=2))

The list of beneficiaries is now part of the transaction, but the operation fails with a missing required posting authority exception:

[...]
{"ops":[["comment",{"parent_author":"stmdev","parent_permlink":"pwdtest","author":"stmdev","permlink":"reply-case-1-1528013878","title":"reply-case-1-1528013878","body":"{'max_accepted_payout': '1000000.000 SBD', 'percent_steem_dollars': 10000, 'allow_votes': True, 'allow_curation_rewards': True} [{'account': 'stmdev', 'weight': 1000}]","json_metadata":"{\"app\": \"beem/0.19.35\"}"}],["comment_options",{"author":"stmdev","permlink":"reply-case-1-1528013878","max_accepted_payout":"1000000.000 SBD","percent_steem_dollars":10000,"allow_votes":true,"allow_curation_rewards":true,"extensions":[[0,{"beneficiaries":[{"account":"stmdev","weight":1000}]}]]}]],"sigs":["STM6x286end3rLZj9ornAaxBaVzovxjHtXzBQppSFXCe67gCMu3xq"]}
[...]
beemapi.exceptions.UnhandledRPCError: missing required posting authority

The used posting key is correct, the same script creates a post with beneficiaries=None.

Possibly related: steemit/steem-python#9

Environment

# beempy --version
beempy, version 0.19.35
# python --version
Python 3.6.5