Exemple #1
0
    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),
        }
Exemple #2
0
 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]
Exemple #3
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")
Exemple #4
0
 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
Exemple #5
0
 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
             },
         )
Exemple #6
0
    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