npm start
Redeploy when you changed Motoko code
npm run deploy-local
.gitignore
initArgs.local.did
to initArgs.did
and adapt it to your needs (see INIT_ARGS.md)If you want to upgrade an existing nft canister, see upgrade nft canister
If you want to create canisters w/o using cycles wallet:
dfx ledger create-canister --amount 0.1 --network ic $(dfx identity get-principal)
Placeholder is optional.
Extension can be any.
assets
folder structure:
assets/
metadata.json
placeholder.svg
1.svg
1_thumbnail.svg
2.svg
2_thumbnail.svg
...
Deploy assets canister
dfx deploy assets --no-wallet --network ic
For local deployment run extra commands:
npm run replica
npm run deploy:ledger
Deploy
npm run deploy <network>
<network>
- local | test | staging | production
local
and test
deployed locally
staging
and production
deployed to IC mainnet
Clean deploy locally
npm run deploy local -- --mode reinstall
Deploy staging
npm run deploy staging
Deploy production
npm run deploy production
Upgrade production canister
npm run upgrade-production
revealDelay > 0
HandBrake
for that or ffmpeg
vessel verify --version 0.8.1
to verify everything still builds correctly after adding a new depdencenyvessels
s moc version when deploying, use DFX_MOC_PATH="$(vessel bin)/moc" dfx deploy
assets
stable variabletokenIndex -> assetIndex
asset[assetIndex] -> NFT
tokenIndex
to NFT
tokenIndex
matches the assetIndex
(assetIndex
= tokenIndex+1
) and the assetIndex
matches the NFT
(NFT
= assetIndex+1
)assetIndex
and the NFT
mint number no longer matchtokenIndex
still points to the same asset at assetIndex
, but this asset no longer has the same NFT
mint numberNFT
mint number from the _asset[index].name
property which we specify when adding an asset to the canisterWe use the getRegistry
(tokenIndex -> AccountIdentifier
) and getTokenToAssetMapping
(tokenIndex -> NFT
) canister methods to backup state offchain. Therefore we simply use a script that queries the afore mentioned methods every 60 minutes and saves the responses on a server. You can find the script in state_backup
. We are also submitting every transaction to CAP
, which again offers off-chain backups of their data.
Note that the indices of the json outputs represent the indices of the internal storage. E.g. index 0
means it is the first item in the array. In the UI (entrepot or stoic wallet) those indices are incremented by one, so they start with 1
and not with 0
.
To have the same token identifiers for the same tokens, it is important to keep the order of the minting when reinstantiating the canister.
So when executing mintNFT
, the to
address is taken from registry.json
and the asset
is taken from tokens.json
. It's important here that the uploading of the assets is on order (start with flower 1, end with flower 2009) and that the assets
index 0 is used by something other than an NFT asset (before it was the seed animation)!
Each test suite is deployed with its own env settings.
First, start a local replica
npm run replica
Deploy and run all unit and e2e tests
npm run test
Run only unit tests
npm run test:unit
Deploy and run specific e2e tests
npm run test:e2e pending-sale
Run tests without deployment (useful when writing tests)
npm run vitest
or
npm run vitest:watch
or run specific test suite
npm run vitest pending-sale
Deploy assets and NFT canister.
Make sure that the NFT is redirected to the asset:
http://localhost:4943/0?canisterId=rrkah-fqaaa-aaaaa-aaaaq-cai
http://localhost:4943/1?canisterId=rrkah-fqaaa-aaaaa-aaaaq-cai
http://localhost:4943/1?canisterId=rrkah-fqaaa-aaaaa-aaaaq-cai&type=thumbnail
http://localhost:4943/?canisterId=rrkah-fqaaa-aaaaa-aaaaq-cai&type=thumbnail&asset=1
http://localhost:4943/?canisterId=rrkah-fqaaa-aaaaa-aaaaq-cai&tokenid=rrkah-fqaaa-aaaaa-aaaaq-cai should have same redirect as http://localhost:4943/0?canisterId=rrkah-fqaaa-aaaaa-aaaaq-cai
NOTE
you can also use http://127.0.0.1:8000/?canisterId=rrkah-fqaaa-aaaaa-aaaaq-cai&asset=0
or http://127.0.0.1:8000/1.svg?canisterId=rrkah-fqaaa-aaaaa-aaaaq-cai&asset=0
locally
add the following line to /etc/hosts
if on mac
127.0.0.1 rrkah-fqaaa-aaaaa-aaaaq-cai.localhost
the canister can now be accesed with
http://rwlgt-iiaaa-aaaaa-aaaaa-cai.localhost:8453/?tokenid=rwlgt-iiaaa-aaaaa-aaaaa-cai
or via command line with
curl "rwlgt-iiaaa-aaaaa-aaaaa-cai.localhost:8453/?tokenid=rwlgt-iiaaa-aaaaa-aaaaa-cai"
to get the tokenid from the canister and index do the following
npm i -g
from within ext-cli
ext token <canister_id> <index>
if there's a settlement that didn't work, we can call the settlements
query method and then settle
using the index to settle the transaction
if there a salesSettelemnts that didnt work, we call the salesSettlements
query method and then retrieve
using the address to settle the transaction