@krolol/freeport-sdk
v7.0.2
Published
### Releases
Downloads
1
Readme
Freeport SDK
Releases
v7.0.0 - Upgradeable contracts
- support for upgradeable contracts
- contract deployment of 2022-01-28 / commit bfb19163
v6.3.0 - Auction with Biconomy
- [BREAKING] Use the correct SimpleAuction contract.
v6.2.0 - Token configuration
- Added Token name and decimals configuration.
v6.1.0 - USDC
- Add the USDC contract address on mainnet.
v6.0.0 - Biconomy
- Add support for Biconomy for gasless transactions.
- Changes to the API: first create the signer, then the contracts.
- Add first tests.
Installation
Freeport SDK uses ethers library
under the hood, but it is not included in this package. Install ethers
as a
dependency in your project along with the SDK:
npm install ethers @cere/freeport-sdk
or
yarn add ethers @cere/freeport-sdk
Usage
Freeport SDK provides an interface to work with Freeport Smart Contracts.
In order to call smart contract methods you must create an object with them using the creator function:
const fiatGateway = createFiatGateway({ provider, contractAddress, mnemonic });
You need to pass a provider
. You can get a Web3 provider from the browser (if
you use Metamask, for example) or create a JsonRpc provider:
const provider = importProvider(); // browser
const provider = createProvider(providerUrl); // Node.js
You also need to specify contractAddress
. You can get the current address for
your chain from SDK or get it from configuration params:
const contractAddress = getFreeportAddress(provider); // browser
const contractAddress = config.get('CONTRACT_ADDRESS'); // Node.js
Here is an example of usage in browser:
const provider = importProvider();
const contractAddress = getFreeportAddress(provider);
const freeport = createFreeport({ provider, contractAddress });
const balance = await freeport.balanceOf(address, nftId);
And here is how you can use it without the browser :
const mnemonic = config.get('WALLET_MNEMONIC');
const providerUrl = config.get('PROVIDER_URL');
const contractAddress = config.get('CONTRACT_ADDRESS');
const provider = createProvider(providerUrl);
const fiatGateway = createFiatGateway({ provider, contractAddress, mnemonic });
await fiatGateway.buyNftFromUsd(...args);
For developers
Versioning
- update the major version if the smart contract addresses change
- also update the major version in case of breaking changes (even if the addresses do not change)
- use
semver
in other cases
Commands
To run the project in watch mode so that any edits you save inside src
causes
a rebuild to /dist
, use yarn start
.
To do a one-off build, use yarn build
.
To run tests:
- Generate a mnemonic (e.g. with Metamask), and get some TEST MATIC on it (e.g., from the faucet).
- Get an API key of a Biconomy account configured with the Freeport dev deployment.
- Create a
.env
file based on.env.example
.
yarn qa
- run all code quality toolsyarn test
- run tests with Jestyarn fix
- fix linting errors and formattingyarn lint
- run ESLint onlyyarn format
- format files with prettieryarn ts
- run TypeScrypt checksyarn update-types
- generate TS types using artifactsyarn deploy
- publish new version
Configuration
Code quality is set up for you with eslint
, prettier
, husky
, and
lint-staged
. Configure your IDE to use them!
Publishing to NPM
- Copy smart contract artifacts to
/src/artifacts
- Run
yarn update-types
- Commit changes with message like "artifacts from commit e57691bc"
- Check that
npm whoami
returns "cere-io" (otherwise update your NPM_TOKEN env var for publishing @cere packages) - Run
yarn deploy
and publish the next version (see Versioning) - Push changes to the remote branch
- Install the new version of SDK in projects that use it
Continuous Integration
GitHub Actions
Two actions are added by default:
main
which installs deps with cache, lints, tests, and builds on all pushes against a Node and OS matrixsize
which comments cost comparison of your library on every pull request usingsize-limit
Module Formats
CJS, ESModules, and UMD module formats are supported.
The appropriate paths are configured in package.json
and dist/index.js
accordingly.