async def get_account_permission(self, addr: TAddress) -> dict: """Get account's permission info from an address. Can be used in `account_permission_update`.""" addr = keys.to_base58check_address(addr) # will check account existence info = await self.get_account(addr) # For old accounts prior to AccountPermissionUpdate, these fields are not set. # So default permission is for backward compatibility. default_witness = None if info.get("is_witness", None): default_witness = { "type": "Witness", "id": 1, "permission_name": "witness", "threshold": 1, "keys": [{ "address": addr, "weight": 1 }], } return { "owner": info.get( "owner_permission", { "permission_name": "owner", "threshold": 1, "keys": [{ "address": addr, "weight": 1 }] }, ), "actives": info.get( "active_permission", [{ "type": "Active", "id": 2, "permission_name": "active", "threshold": 1, "operations": "7fff1fc0033e0100000000000000000000000000000000000000000000000000", "keys": [{ "address": addr, "weight": 1 }], }], ), "witness": info.get("witness_permission", default_witness), }
def trigger_const_smart_contract_function( self, owner_address: TAddress, contract_address: TAddress, function_selector: str, parameter: str, ) -> str: ret = self.provider.make_request( "wallet/triggerconstantcontract", { "owner_address": keys.to_base58check_address(owner_address), "contract_address": keys.to_base58check_address(contract_address), "function_selector": function_selector, "parameter": parameter, "visible": True, }, ) self._handle_api_error(ret) if 'message' in ret['result']: raise TransactionError(ret['result']['message']) return ret["constant_result"][0]
async def get_account_resource(self, addr: TAddress) -> dict: """Get resource info of an account.""" ret = await self.provider.make_request( "wallet/getaccountresource", { "address": keys.to_base58check_address(addr), "visible": True }, ) if ret: return ret else: raise AddressNotFound("account not found on-chain")
def list_assets(self) -> list: """List all TRC10 tokens(assets).""" ret = self.provider.make_request("wallet/getassetissuelist", {"visible": True}) assets = ret["assetIssue"] for asset in assets: asset["id"] = int(asset["id"]) asset["owner_address"] = keys.to_base58check_address(asset["owner_address"]) asset["name"] = bytes.fromhex(asset["name"]).decode() if "abbr" in asset: asset["abbr"] = bytes.fromhex(asset["abbr"]).decode() else: asset["abbr"] = "" asset["description"] = bytes.fromhex(asset["description"]).decode("utf8", "replace") asset["url"] = bytes.fromhex(asset["url"]).decode() return assets
def get_asset(self, id: int = None, issuer: TAddress = None) -> dict: """Get TRC10(asset) info by asset's id or issuer.""" if id and issuer: return ValueError("either query by id or issuer") if id: return self.provider.make_request("wallet/getassetissuebyid", { "value": id, "visible": True }) else: return self.provider.make_request( "wallet/getassetissuebyaccount", { "address": keys.to_base58check_address(issuer), "visible": True }, )
def get_contract(self, addr: TAddress) -> Contract: """Get a contract object.""" addr = keys.to_base58check_address(addr) info = self.provider.make_request("wallet/getcontract", {"value": addr, "visible": True}) try: self._handle_api_error(info) except ApiError: # your java's null pointer exception sucks raise AddressNotFound("contract address not found") cntr = Contract( addr=addr, bytecode=info.get("bytecode", ''), name=info.get("name", ""), abi=info.get("abi", {}).get("entrys", []), origin_energy_limit=info.get("origin_energy_limit", 0), user_resource_percent=info.get("consume_user_resource_percent", 100), client=self, ) return cntr