docs: def register(self, did, checksum, url, account, providers=None):
          """
          Register or update a DID on the block chain using the DIDRegistry smart contract.
  
          :param did: DID to register/update, can be a 32 byte or hexstring
          :param checksum: hex str hash of TODO
          :param url: URL of the resolved DID
          :param account: instance of Account to use to register/update the DID
          :param providers: list of addresses of providers to be allowed to serve the asset and play
              a part in creating and fulfilling service agreements
          :return: Receipt
          """
  
          did_source_id = did_to_id_bytes(did)
          if not did_source_id:
              raise ValueError(f'{did} must be a valid DID to register')
  
          if not urlparse(url):
              raise ValueError(f'Invalid URL {url} to register for DID {did}')
  
          if checksum is None:
              checksum = Web3Provider.get_web3().toBytes(0)
  
          if not isinstance(checksum, bytes):
              raise ValueError(f'Invalid checksum value {checksum}, must be bytes or string')
  
          if account is None:
              raise ValueError('You must provide an account to use to register a DID')
  
          transaction = self._register_attribute(
              did_source_id, checksum, url, account, providers or []
          )
          receipt = self.get_tx_receipt(transaction)
          return receipt and receipt.status == 1