Currently, I am playing around with steem-python.
I wanted to add some missing escrow functions.
And now I hit a wall.
Something is very wrong, I just don't know what.
Here are my thoughts:
Implementation
You just need to change 2 files:
steem/commit.py
steembase/operations.py
In steem/commit.py
add following function:
def escrow_transfer(self,to,agent,fee_amount,fee_asset,escrow_id=None,sbd_amount=0,steem_amount=0,ratification_deadline=7 * 24 * 60 * 60,escrow_expiration=7 * 24 * 60 * 60,json_meta=None,account=None):
if not account:
account = configStorage.get("default_account")
if not account:
raise ValueError("You need to provide an account")
assert fee_asset in ['STEEM', 'SBD']
op = operations.EscrowTransfer(
**{"from": account,
"to": to,
"agent": agent,
"escrow_id": escrow_id or random.getrandbits(32),
"sbd_amount": '{:.{prec}f} {asset}'.format(
float(sbd_amount),
prec=3,
asset="SBD"
),
"steem_amount": '{:.{prec}f} {asset}'.format(
float(steem_amount),
prec=3,
asset="STEEM"
),
"fee": '{:.{prec}f} {asset}'.format(
float(fee_amount),
prec=3,
asset=fee_asset
),
"ratification_deadline":transactions.fmt_time_from_now(ratification_deadline),
"escrow_expiration":transactions.fmt_time_from_now(escrow_expiration),
"json_meta":json_meta
}
)
return self.finalizeOp(op, account, "active")
Also, you need to add from steembase import transactions
because we are using from there fmt_time_from_now
.
Next step, change steembase/operations.py
:
class EscrowTransfer(GrapheneObject):
def __init__(self, *args, **kwargs):
if isArgsThisClass(self, args):
self.data = args[0].data
else:
if len(args) == 1 and len(kwargs) == 0:
kwargs = args[0]
meta = ""
if "json_meta" in kwargs and kwargs["json_meta"]:
if isinstance(kwargs["json_meta"], dict):
meta = json.dumps(kwargs["json_meta"])
else:
meta = kwargs["json_meta"]
super().__init__(OrderedDict([
('from', String(kwargs["from"])),
('to', String(kwargs["to"])),
('agent', String(kwargs["agent"])),
('escrow_id', Uint32(int(kwargs["escrow_id"]))),
('sbd_amount', Amount(kwargs["sbd_amount"])),
('steem_amount', Amount(kwargs["steem_amount"])),
('fee', Amount(kwargs["fee"])),
('ratification_deadline', PointInTime(kwargs["ratification_deadline"])),
('escrow_expiration', PointInTime(kwargs["escrow_expiration"])),
('json_meta', String(meta)),
]))
now we write a small test script:
from steem import Steem
from steem.commit import Commit
s = Steem()
c = Commit(steemd_instance=s,debug=True)
returncode = c.escrow_transfer(to='nanobot', agent='microbot', sbd_amount=0.01,fee_amount=0.001,fee_asset='SBD',ratification_deadline=100,escrow_expiration=100,account='isnochys')
print(returncode)
We enter our passphrase for the wallet, where all keys are store and get this error:
raise RPCError(error_message)
steembase.exceptions.RPCError: 3010000 tx_missing_active_auth: missing required active authority
Missing Active Authority isnochys
{"id":"isnochys","auth":{"weight_threshold":1,"account_auths":[],"key_auths":[["STM6fSSE2YjaKf8GSXcsrTmkLCykwnXFxJGnZkWv6w3UPy9yHF88G",1]]},"owner":{
weight_threshold":1,"account_auths":[],"key_auths":[["STM8YCB4RhAA66DupuwtBVQ53ZTYQNYshxHLBNjnUtn1Tw1oexAAg",1]]}}
th_a transaction.cpp:157 verify_authority
{"ops":[["escrow_transfer",{"from":"isnochys","to":"nanobot","sbd_amount":"0.010 SBD","steem_amount":"0.000 STEEM","escrow_id":4189549674,"agent":"mirobot","fee":"0.001 SBD","json_meta":"","ratification_deadline":"2018-01-26T09:02:48","escrow_expiration":"2018-01-26T09:02:48"}]],"sigs":["STM6fUR5tcHYk
AFdPhJUDq2Ye28fBRCE9bhB9PuC7aYgE1PeWBRk"]}
th_a transaction.cpp:172 verify_authority
{"*this":{"ref_block_num":44134,"ref_block_prefix":2718848,"expiration":"2018-01-26T09:02:08","operations":[["escrow_transfer",{"from":"isnochys","to
:"nanobot","sbd_amount":"0.010 SBD","steem_amount":"0.000 STEEM","escrow_id":4189549674,"agent":"microbot","fee":"0.001 SBD","json_meta":"","ratification
deadline":"2018-01-26T09:02:48","escrow_expiration":"2018-01-26T09:02:48"}]],"extensions":[],"signatures":["1f2f6dc8f1eda6269e3f2cabb5d6f00aa04085f0b5563
6757619181ad25e094ef657176c87b3cab39dd92f35b311746011cb84678b21185e85cae96781c16377a"]}}
th_a transaction.cpp:285 verify_authority
{"call.method":"call","call.params":["database_api","verify_authority",[{"ref_block_num":44134,"ref_block_prefix":2718848,"expiration":"2018-01-26T09
02:08","operations":[["escrow_transfer",{"from":"isnochys","to":"nanobot","agent":"microbot","escrow_id":4189549674,"sbd_amount":"0.010 SBD","steem_amoun
":"0.000 STEEM","fee":"0.001 SBD","ratification_deadline":"2018-01-26T09:02:48","escrow_expiration":"2018-01-26T09:02:48","json_meta":""}]],"extensions":
],"signatures":["1f2f6dc8f1eda6269e3f2cabb5d6f00aa04085f0b5563b6757619181ad25e094ef657176c87b3cab39dd92f35b311746011cb84678b21185e85cae96781c16377a"]}]]}
th_a websocket_api.cpp:124 on_message
Missing Active Authority isnochys ..
Come on, thats me!
I do all the shenanigans with this account!
What step did I miss?
The active key should be the right one..
Oh, let's have a qiock look, how your outpot changes, when we set no_broadcast=True
:
$ python test.py
Fri, 26 Jan 2018 10:19:15 +0000
Passphrase:
Not broadcasting anything!
{'ref_block_num': 44496, 'ref_block_prefix': 1419191626, 'expiration': '2018-01-26T09:20:15', 'operations': [['escrow_transfer', {'from': 'isnochys', 'to': 'nanobot', 'agent': 'microbot', 'escrow_id': 4291643727, 'sbd_amount': '0.010 SBD', 'steem_amount': '0.000 STEEM', 'fee': '0.001 SBD', 'ratification_deadline': '2018-01-26T09:20:55', 'escrow_expiration': '2018-01-26T09:20:55', 'json_meta': ''}]], 'extensions': [], 'signatures': ['20669ebcb1c8d467bfcf2c04f033959ccf6b46af8991f71315b0f28ca5d9f3f5c90b9a2e0a1446d9eee4423a907c4e0cc9d012ba257d35a67aaa1fc45c0913cf16']}
Hmm, the function is working, broadcasting is the issue here:(
@OriginalWorks
did u ever figure this out?
Not really, sorry
Vote for my creator @isnochys as witness!This post has been upvoted by @microbot with 30.7%!
Peace, Abundance, and Liberty Network (PALnet) Discord Channel. It's a completely public and open space to all members of the Steemit community who voluntarily choose to be there.Congratulations! This post has been upvoted from the communal account, @minnowsupport, by isnochys from the Minnow Support Project. It's a witness project run by aggroed, ausbitbank, teamsteem, theprophet0, someguy123, neoxian, followbtcnews, and netuoso. The goal is to help Steemit grow by supporting Minnows. Please find us at the
If you would like to delegate to the Minnow Support Project you can do so by clicking on the following links: 50SP, 100SP, 250SP, 500SP, 1000SP, 5000SP.
Be sure to leave at least 50SP undelegated on your account.