# laconic-sdk

Client library used by TS/JS applications to communicate with laconicd.

## Tests

Follow these steps to run the tests:

- After cloning this repo run:

  ```bash
  yarn
  ```

- Copy [.env.example](./.env.example) file and create a `.env` file.

- Clone the [laconicd repo](https://github.com/cerc-io/laconicd) and change to repo directory.

- Run the chain using `./init.sh`.

- Export the private key using:

  ```bash
  laconicd keys export mykey --unarmored-hex --unsafe
  ```

- Copy the private key and assign it to variable `PRIVATE_KEY` in the `.env` file.

- Run the tests in laconic-sdk repo:

  ```bash
  yarn test
  ```

- Run the tests with auctions enabled

  - In laconicd repo run:

    ```bash
    TEST_AUCTION_ENABLED=true ./init.sh
    ```

  - Export the private key and change it in `.env` file again using:

    ```bash
    laconicd keys export mykey --unarmored-hex --unsafe
    ```

  - Run tests:

    ```bash
    yarn test:auctions
    ```

- Run the tests for record and authority expiry

  - In laconicd repo run:

    ```bash
    TEST_NAMESERVICE_EXPIRY=true ./init.sh
    ```

  - Export the private key and change it in `.env` file again using:

    ```bash
    laconicd keys export mykey --unarmored-hex --unsafe
    ```

  - Run tests:

    ```bash
    yarn test:nameservice-expiry
    ```

## Development

[README](./DEVELOPMENT.md)

## Known Issues

- Passing a float type value in [watcher attributes](./src/testing/data/watcher.yml) throws error when sending `setRecord` message.
  ```
  failed to execute message; message index: 0: Invalid signature.: unauthorized
  ```

- When sending `setRecord` message, an integer value passed in watcher attributes is parsed as float type in laconicd while [unmarshalling json](https://pkg.go.dev/encoding/json#Unmarshal).

- `setRecord` message throws error when fileds in [Record](./src/types.ts) message are not assigned.
  ```
  failed to pack and hash typedData primary type: provided data '<nil>' doesn't match type 'string' [tharsis/ethermint/ethereum/eip712/eip712.go:33]
  ```
  Passing dummy values to work around issue.