Skip to content

Commit 0f182d2

Browse files
committed
added update_account_permissions()
1 parent ee9b69f commit 0f182d2

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

tronapi/transactionbuilder.py

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -973,3 +973,66 @@ def update_energy_limit(self,
973973
'contract_address': self.tron.address.to_hex(contract_address),
974974
'origin_energy_limit': origin_energy_limit
975975
})
976+
977+
def check_permissions(self, permissions, _type):
978+
if permissions is not None:
979+
if permissions['type'] != _type or \
980+
not permissions['permission_name'] or \
981+
not is_string(permissions['permission_name']) or \
982+
not is_integer(permissions['threshold']) or \
983+
permissions['threshold'] < 1 or not permissions['keys']:
984+
return False
985+
986+
for key in permissions['key']:
987+
if not self.tron.isAddress(key['address']) or \
988+
not is_integer(key['weight']) or \
989+
key['weight'] > permissions['threshold'] or \
990+
key['weight'] < 1 or _type == 2 and not permissions['operations']:
991+
return False
992+
993+
return True
994+
995+
def update_account_permissions(self, owner_address=None,
996+
owner_permissions=None,
997+
witness_permissions=None,
998+
actives_permissions=None
999+
):
1000+
"""Role: update user permissions (for multi-signature)
1001+
1002+
Args:
1003+
owner_address (str): The address of the account whose permissions are to be modified
1004+
owner_permissions: Modified owner permission
1005+
witness_permissions: Modified witness permission (if it is a witness)
1006+
actives_permissions: Modified actives permission
1007+
"""
1008+
1009+
if owner_address is None:
1010+
owner_address = self.tron.default_address.hex
1011+
1012+
if not self.check_permissions(owner_permissions, 0):
1013+
raise InvalidTronError('Invalid ownerPermissions provided')
1014+
1015+
if not self.check_permissions(witness_permissions, 1):
1016+
raise InvalidTronError('Invalid witnessPermissions provided')
1017+
1018+
for actives_permission in actives_permissions:
1019+
if not self.check_permissions(actives_permission, 2):
1020+
raise InvalidTronError('Invalid activesPermissions provided')
1021+
1022+
data = {
1023+
owner_address: owner_address
1024+
}
1025+
1026+
if owner_permissions:
1027+
data['owner'] = owner_permissions
1028+
1029+
if witness_permissions:
1030+
data['witness'] = witness_permissions
1031+
1032+
if actives_permissions:
1033+
if len(actives_permissions) == 1:
1034+
data['actives'] = actives_permissions[0]
1035+
else:
1036+
data['actives'] = actives_permissions
1037+
1038+
return self.tron.manager.request('wallet/accountpermissionupdate', data)

0 commit comments

Comments
 (0)