Skip to content

cerc-io/azimuth-watcher-ts

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

azimuth-watcher-ts

Watcher for the Azimuth PKI on Ethereum, used in Urbit identities. Read more about Azimuth:

This app can be run using Stack Orchestrator:

It is also hosted here

Usage

Here are some example queries:

{
  azimuthIsActive(
    blockHash: "0x2461e78f075e618173c524b5ab4309111001517bb50cfd1b3505aed5433cf5f9"
    contractAddress: "0x223c067F8CF28ae173EE5CafEa60cA44C335fecB"
    _point: 1
  ) {
    value
  }
  censuresGetCensuredByCount(
    blockHash: "0x2461e78f075e618173c524b5ab4309111001517bb50cfd1b3505aed5433cf5f9"
    contractAddress: "0x325f68d32BdEe6Ed86E7235ff2480e2A433D6189"
    _who: 6054
  ) {
    value
  }
  claimsFindClaim(
    blockHash: "0x2461e78f075e618173c524b5ab4309111001517bb50cfd1b3505aed5433cf5f9"
    contractAddress: "0xe7e7f69b34D7d9Bd8d61Fb22C33b22708947971A"
    _whose: 1967913144
    _protocol: "text"
    _claim: "Shrek is NOT Drek!"
  ) {
    value
  }
  linearStarReleaseVerifyBalance(
    blockHash: "0x2461e78f075e618173c524b5ab4309111001517bb50cfd1b3505aed5433cf5f9"
    contractAddress: "0x86cd9cd0992F04231751E3761De45cEceA5d1801"
    _participant: "0xbD396c580d868FBbE4a115DD667E756079880801"
  ) {
    value
  }
  conditionalStarReleaseWithdrawLimit(
    blockHash: "0x2461e78f075e618173c524b5ab4309111001517bb50cfd1b3505aed5433cf5f9"
    contractAddress: "0x8C241098C3D3498Fe1261421633FD57986D74AeA"
    _participant: "0x7F0584938E649061e80e45cF88E6d8dDDb22f2aB"
    _batch: 2
  ) {
    value
  }
  pollsGetUpgradeProposalCount(
    blockHash: "0xeaf611fabbe604932d36b97c89955c091e9582e292b741ebf144962b9ff5c271"
    contractAddress: "0x7fEcaB617c868Bb5996d99D95200D2Fa708218e4"
  ) {
    value
  }
  eclipticBalanceOf(
    blockHash: "0x5e82abbe6474caf7b5325022db1d1287ce352488b303685493289770484f54f4"
    contractAddress: "0x33EeCbf908478C10614626A9D304bfe18B78DD73"
    _owner: "0x4b5E239C1bbb98d44ea23BC9f8eC7584F54096E8"
  ) {
    value
  }
  delegatedSendingCanSend(
    blockHash: "0x2461e78f075e618173c524b5ab4309111001517bb50cfd1b3505aed5433cf5f9"
    contractAddress: "0xf6b461fE1aD4bd2ce25B23Fe0aff2ac19B3dFA76"
    _as: 1
    _point: 1
  ) {
    value
  }
}

Generate Watchers

Steps to generate Azimuth watchers using the code generator (@cerc-io/codegen)

  • Clone the original Azimuth repo for required contracts:

    git clone [email protected]:urbit/azimuth.git
    
    # Install dependencies
    npm install
    
    # Contracts are located in the contracts folder
  • Setup cerc-io/watcher-ts repo:

    git clone [email protected]:cerc-io/watcher-ts.git
    
    # Install dependencies and build packages
    yarn install && yarn build
  • Create a folder to place all the generated watchers in:

    mkdir -p azimuth-watcher-ts/packages
  • In watcher-ts/packages/codegen, create a config.yaml file with required codegen config for generating the watcher for a contract

    For example, for Azimuth contract:

    # Contracts to watch (required).
    contracts:
        # Contract name.
      - name: Azimuth
        # Contract file path or an url.
        path: /home/user/azimuth/contracts/Azimuth.sol
        # Contract kind
        kind: Azimuth
    
    # Output folder path (logs output using `stdout` if not provided).
    outputFolder: /home/user/azimuth-watcher-ts/packages/azimuth-watcher
    
    # Code generation mode [eth_call | storage | all | none] (default: none).
    mode: eth_call
    
    # Kind of watcher [lazy | active] (default: active).
    kind: active
    
    # Watcher server port (default: 3008).
    port: 3001
    
    # Solc version to use (optional)
    # If not defined, uses solc version listed in dependencies
    solc: v0.4.24+commit.e67f0147
    
    # Flatten the input contract file(s) [true | false] (default: true).
    flatten: true

    Note: Create .sol files with the contract code from Etherscan for ConditionalStarRelease, DelegatedSending, Ecliptic and LinearStarRelease contracts and use the file path for contracts.path

  • Run codegen command to generate the watcher:

    # In watcher-ts/packages/codegen
    yarn codegen --config-file ./config.yaml
  • Update contracts, outputFolder and port fields in the config and re-run the codegen command for all other contracts

  • Setup the parent folder /home/user/azimuth-watcher-ts where all the generated watchers are placed as a monorepo

  • The gateway GQL server can be used to proxy queries to their respective watchers