- Export for artifacts
- Added Treats config
- New method on NftAttachment contract (collectionManagerAttachToNFT) for attaching assets by Collections.
- Deployed to DEV davinci and DEV liveone
- Include the Liveone prod deployment.
- Include the Davinci prod deployment.
- Include the staging deployments.
- Separate buyNftByUsd and buyNftsByUsd (plural) functions to support multiple deployments and upgrades.
- new Marketplace and Auction smart contracts
- added OpenSea compatible Collections
- added 'quantity' parameter for buyNftByUsd method
- Added LiveOne config for STAGE/PROD
- Added LiveOne config
- support for upgradeable contracts
- contract deployment of 2022-01-28 / commit bfb19163
- [BREAKING] Use the correct SimpleAuction contract.
- Added Token name and decimals configuration.
- Add the USDC contract address on mainnet.
- Add support for Biconomy for gasless transactions.
- Changes to the API: first create the signer, then the contracts.
- Add first tests.
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
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);
- 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
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
Code quality is set up for you with eslint
, prettier
, husky
, and
lint-staged
. Configure your IDE to use them!
- 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
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
CJS, ESModules, and UMD module formats are supported.
The appropriate paths are configured in package.json
and dist/index.js
accordingly.