@@ -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