Skip to content

Commit 6e94863

Browse files
committed
Add Azle Implementation of DIP721 NFT example
1 parent 7b8837b commit 6e94863

File tree

6 files changed

+511
-0
lines changed

6 files changed

+511
-0
lines changed

dapps/azle/dfx.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,14 @@
77
"build": "npx azle basic_dao",
88
"wasm": ".azle/basic_dao/basic_dao.wasm",
99
"gzip": false
10+
},
11+
"dip721_nft": {
12+
"type": "custom",
13+
"main": "dip721-nft/index.ts",
14+
"candid": "dip721-nft/index.did",
15+
"build": "npx azle dip721_nft",
16+
"wasm": ".azle/dip721_nft/dip721_nft.wasm",
17+
"gzip": false
1018
}
1119
}
1220
}

dapps/azle/dip721-nft/defaults.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { State } from "./types";
2+
3+
export function state(): State {
4+
return {
5+
nfts: [],
6+
custodians: new Set(),
7+
operators: new Map(),
8+
logo: {
9+
logo_type: "",
10+
data: "",
11+
},
12+
name: "",
13+
symbol: "",
14+
txid: 0n,
15+
nextTxid() {
16+
return ++this.txid;
17+
},
18+
};
19+
}

dapps/azle/dip721-nft/index.did

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
service: (record {logo:record {data:text; logo_type:text}; name:text; custodians:opt vec principal; symbol:text}) -> {
2+
approveDip721: (principal, nat64) -> (variant {Ok:nat; Err:variant {ZeroAddress; InvalidTokenId; Unauthorized; Other}});
3+
balanceOfDip721: (principal) -> (nat64) query;
4+
burnDip721: (nat64) -> (variant {Ok:nat; Err:variant {ZeroAddress; InvalidTokenId; Unauthorized; Other}});
5+
isApprovedForAllDip721: (principal) -> (bool) query;
6+
is_custodian: (principal) -> (bool) query;
7+
mintDip721: (principal, vec record {data:vec nat8; key_val_data:vec record {text; variant {Nat64Content:nat64; Nat32Content:nat32; Nat8Content:nat8; NatContent:nat; Nat16Content:nat16; BlobContent:vec nat8; TextContent:text}}; purpose:variant {Preview; Rendered}}) -> (variant {Ok:record {id:nat; token_id:nat64}; Err:variant {Unauthorized}});
8+
nameDip721: () -> (text) query;
9+
ownerOfDip721: (nat64) -> (variant {Ok:principal; Err:variant {ZeroAddress; InvalidTokenId; Unauthorized; Other}}) query;
10+
safeTransferFromDip721: (principal, principal, nat64) -> (variant {Ok:nat; Err:variant {ZeroAddress; InvalidTokenId; Unauthorized; Other}});
11+
safeTransferFromNotifyDip721: (principal, principal, nat64, vec nat8) -> (variant {Ok:nat; Err:variant {ZeroAddress; InvalidTokenId; Unauthorized; Other}});
12+
setApprovalForAllDip721: (principal, bool) -> (variant {Ok:nat; Err:variant {ZeroAddress; InvalidTokenId; Unauthorized; Other}});
13+
set_custodian: (principal, bool) -> (variant {Ok:bool; Err:variant {ZeroAddress; InvalidTokenId; Unauthorized; Other}});
14+
set_logo: (record {data:text; logo_type:text}) -> (variant {Ok:bool; Err:variant {ZeroAddress; InvalidTokenId; Unauthorized; Other}});
15+
set_name: (text) -> (variant {Ok:bool; Err:variant {ZeroAddress; InvalidTokenId; Unauthorized; Other}});
16+
set_symbol: (text) -> (variant {Ok:bool; Err:variant {ZeroAddress; InvalidTokenId; Unauthorized; Other}});
17+
supportedInterfacesDip721: () -> (vec variant {Burn; Mint; Approval; TransactionHistory; TransferNotification}) query;
18+
symbolDip721: () -> (text) query;
19+
totalSupplyDip721: () -> (nat64) query;
20+
transferFromDip721: (principal, principal, nat64) -> (variant {Ok:nat; Err:variant {ZeroAddress; InvalidTokenId; Unauthorized; Other}});
21+
transferFromNotifyDip721: (principal, principal, nat64, vec nat8) -> (variant {Ok:nat; Err:variant {ZeroAddress; InvalidTokenId; Unauthorized; Other}});
22+
}

0 commit comments

Comments
 (0)