https://github.com/mlabs-haskell/hydra-auction-offchain
https://github.com/mlabs-haskell/hydra-auction-offchain
Last synced: 6 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/mlabs-haskell/hydra-auction-offchain
- Owner: mlabs-haskell
- License: apache-2.0
- Created: 2023-11-15T10:40:25.000Z (over 2 years ago)
- Default Branch: staging
- Last Pushed: 2024-04-26T16:27:45.000Z (about 2 years ago)
- Last Synced: 2024-05-01T11:44:02.964Z (about 2 years ago)
- Language: PureScript
- Size: 1.12 MB
- Stars: 2
- Watchers: 9
- Forks: 0
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# hydra-auction-offchain
- [Environment](#environment)
- [Workflows](#workflows)
- [Use as an NPM dependency](#use-as-an-npm-dependency)
- [Bundle](#bundle)
- [Serve demo](#serve-demo)
- [Deploy locally using Plutip](#deploy-locally-using-plutip)
## Environment
Before executing any commands, make sure you are within the Nix development
environment and have configured the necessary environment variables.
Follow these steps:
1. Run `nix develop` in the root of the repository to enter the dev environment.
2. Set the required environment variables:
```shell
export NPM_ENV=1
export CARDANO_NETWORK=preprod
export BLOCKFROST_API_KEY=
export PLUTIP_ENV_HOST_PORT=localhost:8083
export DEMO_HOST_PORT=localhost:8080
```
**Important**: Set `NPM_ENV` to 1 if you intend to [use `hydra-auction-offchain`
as an NPM dependency](#use-as-an-npm-dependency). If you need to enter the Nix development environment,
leave this variable unset.
Note: Blockfrost API key for preprod network can be generated at
[Blockfrost](https://blockfrost.io/).
## Workflows
### Use as an NPM dependency
The easiest way to start using `hydra-auction-offchain` is to specify it as a
git dependency in your `package.json`. Running `npm install` from within your
project will fetch the library from GitHub and generate the `dist` folder using
the environment variables set beforehand.
**Important**: Before executing `npm install`, ensure that you have set
`NPM_ENV` environment variable to 1 (don't forget to set other required env
variables too). Otherwise, the necessary `postinstall` and `prepare` npm scripts
won't run, resulting in the failure to generate the `dist` folder.
Specify the dependency in `package.json` as follows:
```json
"dependencies": {
"hydra-auction-offchain": "git+ssh://git@github.com:mlabs-haskell/hydra-auction-offchain"
}
```
Then, import the API into your project as shown below:
```TypeScript
import {
announceAuction,
awaitTxConfirmed,
mintTokenUsingAlwaysMints,
queryAuctions
} from "hydra-auction-offchain";
import type {
AnnounceAuctionContractParams,
ContractOutput,
POSIXTime,
TokenName,
TransactionHash,
WalletApp
} from "hydra-auction-offchain";
```
For a complete example, refer to [demo/src/index.ts](./demo/src/index.ts).
### Bundle
To bundle the project for the browser, run:
```
make bundle
```
This command will compile the PureScript code, bundle it with the TypeScript API
using `esbuild`, and generate a `dist` folder that is ready for import into your
codebase:
```TypeScript
import { announceAuction, queryAuctions } from "./dist";
import type {
AnnounceAuctionContractParams,
ContractOutput,
TransactionHash,
WalletApp
} from "./dist";
```
For a more detailed example on how to use the TypeScript API, refer to
[demo/src/index.ts](./demo/src/index.ts).
### Serve demo
To serve the demo on localhost, run:
```
make serve
```
This command will [bundle](#bundle) the project, spin up a simple HTTP server on localhost
and execute the code in [demo/src/index.ts](./demo/src/index.ts).
### Deploy locally using Plutip
It is also possible to test the contracts against a locally deployed testnet
network using [Plutip](https://github.com/mlabs-haskell/plutip). To run the demo
against a Plutip network, follow these steps:
1. Open 2 shell windows and set up dev environment in both of them.
2. In the first shell, execute `make plutip-env` to spin up a disposable private
network. This will generate a wallet, pre-fund it with a substantial amount of
ADA, and start an HTTP server to communicate the private key of the generated
wallet to the frontend code.
3. Update the demo code in [demo/src/index.ts](./demo/src/index.ts) to use the
Plutip wallet:
```TypeScript
const walletApp: WalletApp = "Plutip";
```
4. In the second shell, run `make serve`.
Note: Prior to announcing the auction, ensure that the auction lot tokens have
been minted and placed in the wallet, otherwise the `AnnounceAuction` contract
will fail with error code `AnnounceAuction04`. For testing purposes, you can
utilize the provided `mintTokenUsingAlwaysMints` function to mint tokens using
the `AlwaysMints` minting policy.
Note: It is recommended to stop the plutip-env service by entering the `stop`
command to stdin. This ensures the correct deallocation of resources.