diff --git a/404.html b/404.html index 73766f0ec..df9f300b0 100644 --- a/404.html +++ b/404.html @@ -17,8 +17,8 @@ - - + + @@ -26,7 +26,7 @@
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- - + + \ No newline at end of file diff --git a/assets/js/08a2cefb.80ae1b61.js b/assets/js/08a2cefb.80ae1b61.js deleted file mode 100644 index b82fe5ec5..000000000 --- a/assets/js/08a2cefb.80ae1b61.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkve_ps=self.webpackChunkve_ps||[]).push([[8812],{4137:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>m});var a=t(7294);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function l(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function r(e){for(var n=1;n=0||(i[t]=e[t]);return i}(e,n);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}var d=a.createContext({}),s=function(e){var n=a.useContext(d),t=n;return e&&(t="function"==typeof e?e(n):r(r({},n),e)),t},c=function(e){var n=s(e.components);return a.createElement(d.Provider,{value:n},e.children)},p={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},u=a.forwardRef((function(e,n){var t=e.components,i=e.mdxType,l=e.originalType,d=e.parentName,c=o(e,["components","mdxType","originalType","parentName"]),u=s(t),m=i,k=u["".concat(d,".").concat(m)]||u[m]||p[m]||l;return t?a.createElement(k,r(r({ref:n},c),{},{components:t})):a.createElement(k,r({ref:n},c))}));function m(e,n){var t=arguments,i=n&&n.mdxType;if("string"==typeof e||i){var l=t.length,r=new Array(l);r[0]=u;var o={};for(var d in n)hasOwnProperty.call(n,d)&&(o[d]=n[d]);o.originalType=e,o.mdxType="string"==typeof e?e:i,r[1]=o;for(var s=2;s{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>p,frontMatter:()=>l,metadata:()=>o,toc:()=>s});var a=t(7462),i=(t(7294),t(4137));const l={sidebar_position:3,sidebar_label:"TIP-4.3"},r="Non-Fungible Token on-chain indexes (TIP-4.3)",o={unversionedId:"standards/TIP/TIP-4/3",id:"standards/TIP/TIP-4/3",title:"Non-Fungible Token on-chain indexes (TIP-4.3)",description:"Requires: TIP-4.1",source:"@site/docs/standards/TIP/TIP-4/3.md",sourceDirName:"standards/TIP/TIP-4",slug:"/standards/TIP/TIP-4/3",permalink:"/standards/TIP/TIP-4/3",draft:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3,sidebar_label:"TIP-4.3"},sidebar:"standardSidebar",previous:{title:"TIP-4.2",permalink:"/standards/TIP/TIP-4/2"},next:{title:"TIP-4.4",permalink:"/standards/TIP/TIP-4/4"}},d={},s=[{value:"Abstract",id:"abstract",level:2},{value:"Motivation",id:"motivation",level:2},{value:"Specification",id:"specification",level:2},{value:"Contracts",id:"contracts",level:2},{value:"IIndexBasis",id:"iindexbasis",level:2},{value:"IndexBasis",id:"indexbasis",level:2},{value:"IIndexBasis.getInfo()",id:"iindexbasisgetinfo",level:3},{value:"IIndexBasis.destruct()",id:"iindexbasisdestruct",level:3},{value:"IIndex",id:"iindex",level:2},{value:"Index",id:"index",level:2},{value:"Index.getInfo()",id:"indexgetinfo",level:3},{value:"IIndexBasis.destruct()",id:"iindexbasisdestruct-1",level:3},{value:"Collection",id:"collection",level:2},{value:"TIP4_3Collection",id:"tip4_3collection",level:3},{value:"TIP4_3Collection.indexBasisCode()",id:"tip4_3collectionindexbasiscode",level:4},{value:"TIP4_3Collection.indexBasisCodeHash()",id:"tip4_3collectionindexbasiscodehash",level:4},{value:"TIP4_3Collection.indexCode()",id:"tip4_3collectionindexcode",level:4},{value:"TIP4_3Collection.indexCodeHash()",id:"tip4_3collectionindexcodehash",level:4},{value:"TIP4_3Collection.indexBasis()",id:"tip4_3collectionindexbasis",level:4},{value:"Code salt parameters",id:"code-salt-parameters",level:3},{value:"Example of IndexBasis deployment",id:"example-of-indexbasis-deployment",level:3},{value:"NFT",id:"nft",level:2},{value:"TIP4_3NFT",id:"tip4_3nft",level:3},{value:"TIP4_3NFT.indexCode()",id:"tip4_3nftindexcode",level:4},{value:"TIP4_3NFT.indexCodeHash()",id:"tip4_3nftindexcodehash",level:4},{value:"TIP4_3NFT.resolveIndex()",id:"tip4_3nftresolveindex",level:4},{value:"Code salt parameters",id:"code-salt-parameters-1",level:3},{value:"Example of Index deployment",id:"example-of-index-deployment",level:3},{value:"Example of dApp query for search by index",id:"example-of-dapp-query-for-search-by-index",level:2},{value:"Source code",id:"source-code",level:2},{value:"Visualization",id:"visualization",level:2},{value:"Legend",id:"legend",level:3},{value:"IndexBasis deployment for Collection",id:"indexbasis-deployment-for-collection",level:3},{value:"Index contracts deployment for NFT",id:"index-contracts-deployment-for-nft",level:3},{value:"Redeploy Index contracts after changeOwner",id:"redeploy-index-contracts-after-changeowner",level:3},{value:"References",id:"references",level:2}],c={toc:s};function p(e){let{components:n,...l}=e;return(0,i.kt)("wrapper",(0,a.Z)({},c,l,{components:n,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"non-fungible-token-on-chain-indexes-tip-43"},"Non-Fungible Token on-chain indexes (TIP-4.3)"),(0,i.kt)("p",null,"Requires: ",(0,i.kt)("a",{parentName:"p",href:"/standards/TIP/TIP-4/1"},"TIP-4.1"),"\nRequires: ",(0,i.kt)("a",{parentName:"p",href:"/standards/TIP/TIP-6/1"},"TIP-6.1")),(0,i.kt)("h2",{id:"abstract"},"Abstract"),(0,i.kt)("p",null,"Using the Index contract code, you can find all your NFT with one ",(0,i.kt)("a",{parentName:"p",href:"https://gql.venom.foundation/graphql"},"dApp")," query.\nThis makes blockchain application less dependent on different off-chain parsers and indexers\tThis makes blockchain application less dependent on different off-chain parsers and indexers."),(0,i.kt)("p",null,"On-chain Indexes solves easy and fast searching any data in blockchain.\nThis document shows standard for basic query.\nAny developer can get an idea of this solution and realize his own on-chain index."),(0,i.kt)("h2",{id:"motivation"},"Motivation"),(0,i.kt)("p",null,"A standard interface allows search all Collection and all NFT by owner using base ",(0,i.kt)("a",{parentName:"p",href:"https://gql.venom.foundation/graphql"},"dApp")," functionality."),(0,i.kt)("h2",{id:"specification"},"Specification"),(0,i.kt)("p",null,"The keywords \u201cMUST\u201d, \u201cMUST NOT\u201d, \u201cREQUIRED\u201d, \u201cSHALL\u201d, \u201cSHALL NOT\u201d, \u201cSHOULD\u201d, \u201cSHOULD NOT\u201d, \u201cRECOMMENDED\u201d, \u201cMAY\u201d, and \u201cOPTIONAL\u201d in this document are to be interpreted as described in ",(0,i.kt)("a",{parentName:"p",href:"https://datatracker.ietf.org/doc/html/rfc2119"},"RFC 2119")),(0,i.kt)("h2",{id:"contracts"},"Contracts"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Collection")," - ",(0,i.kt)("a",{parentName:"li",href:"/standards/TIP/TIP-4/1"},"TIP4.1")," contract that minted token"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"NFT")," - ",(0,i.kt)("a",{parentName:"li",href:"/standards/TIP/TIP-4/1"},"TIP4.1")," contract that store token information"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"IndexBasis")," - contract, that helps to find all collections by the ",(0,i.kt)("strong",{parentName:"li"},"code hash")," of which"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Index")," - contract, that helps to find:",(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"All user tokens in current collection using ",(0,i.kt)("strong",{parentName:"li"},"owner address")," and ",(0,i.kt)("strong",{parentName:"li"},"collection address")),(0,i.kt)("li",{parentName:"ul"},"All user tokens in all collections using ",(0,i.kt)("strong",{parentName:"li"},"owner address"))))),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"code")," of ",(0,i.kt)("inlineCode",{parentName:"p"},"IndexBasis")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"Index")," contracts and ",(0,i.kt)("strong",{parentName:"p"},"code hash")," of contracts is fixed and ",(0,i.kt)("strong",{parentName:"p"},"CANNOT BE CHANGED")),(0,i.kt)("h2",{id:"iindexbasis"},"IIndexBasis"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},"pragma ton-solidity >= 0.58.0;\n\ninterface IIndexBasis {\n function getInfo() external view responsible returns (address collection);\n function destruct(address gasReceiver) external;\n}\n")),(0,i.kt)("h2",{id:"indexbasis"},"IndexBasis"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},"pragma ton-solidity >= 0.58.0;\n\nimport 'IIndexBasis.sol';\n\n/**\n * Errors\n * 101 - Method for collection only\n **/\ncontract IndexBasis is IIndexBasis {\n address static _collection;\n\n modifier onlyCollection() {\n require(msg.sender == _collection, 101, \"Method for collection only\");\n tvm.accept();\n _;\n }\n\n constructor() public onlyCollection {}\n\n function getInfo() override public view responsible returns (address collection) {\n return {value: 0, flag: 64} _collection;\n }\n\n function destruct(address gasReceiver) override public onlyCollection {\n selfdestruct(gasReceiver);\n }\n}\n")),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Code hash")," of ",(0,i.kt)("inlineCode",{parentName:"p"},"IndexBasis")," compiled by ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/tonlabs/TON-Solidity-Compiler/tree/a222452e27aacff14fdf2fff356542843a2a8d1c"},"TVMCompiler")," ",(0,i.kt)("inlineCode",{parentName:"p"},"v0.58.2")," and ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/tonlabs/TVM-linker/tree/740f9f62a4e68c9f515667c109b116f265942d72"},"TVM-linker")," ",(0,i.kt)("inlineCode",{parentName:"p"},"v0.14.51")," without salting is ",(0,i.kt)("inlineCode",{parentName:"p"},"2359f897c9527073b1c95140c670089aa5ab825f5fd1bd453db803fbab47def2")),(0,i.kt)("h3",{id:"iindexbasisgetinfo"},"IIndexBasis.getInfo()"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},"function getInfo() external view responsible returns (address collection);\n")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"collection")," (",(0,i.kt)("inlineCode",{parentName:"li"},"address"),") - collection token contract address")),(0,i.kt)("h3",{id:"iindexbasisdestruct"},"IIndexBasis.destruct()"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},"function destruct(address gasReceiver) external;\n")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"gasReceiver")," (",(0,i.kt)("inlineCode",{parentName:"li"},"address"),") - address of contract that receives all remaining contract balance after ",(0,i.kt)("inlineCode",{parentName:"li"},"selfdestruct()")," call")),(0,i.kt)("h2",{id:"iindex"},"IIndex"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},"pragma ton-solidity >= 0.58.0;\n\ninterface IIndex {\n function getInfo() external view responsible returns (\n address collection,\n address owner,\n address nft\n );\n function destruct(address gasReceiver) external;\n}\n")),(0,i.kt)("h2",{id:"index"},"Index"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},"pragma ton-solidity >= 0.58.0;\n\nimport 'IIndex.sol';\n\n/**\n * Errors\n * 101 - Method for NFT only\n * 102 - Salt doesn't contain any value\n **/\ncontract Index is IIndex {\n address static _nft;\n \n address _collection;\n address _owner;\n\n constructor(address collection) public {\n optional(TvmCell) salt = tvm.codeSalt(tvm.code());\n require(salt.hasValue(), 102, \"Salt doesn't contain any value\");\n (, address collection_, address owner) = salt\n .get()\n .toSlice()\n .decode(string, address, address);\n require(msg.sender == _nft);\n tvm.accept();\n _collection = collection_;\n _owner = owner;\n if (collection_.value == 0) {\n _collection = collection;\n }\n }\n\n function getInfo() override public view responsible returns (\n address collection,\n address owner,\n address nft\n ) {\n return {value: 0, flag: 64} (\n _collection,\n _owner,\n _nft\n );\n }\n\n function destruct(address gasReceiver) override public {\n require(msg.sender == _nft, 101, \"Method for NFT only\");\n selfdestruct(gasReceiver);\n }\n}\n")),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Code hash")," of ",(0,i.kt)("inlineCode",{parentName:"p"},"Index")," compiled by ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/tonlabs/TON-Solidity-Compiler/tree/a222452e27aacff14fdf2fff356542843a2a8d1c"},"TVMCompiler")," ",(0,i.kt)("inlineCode",{parentName:"p"},"v0.58.2")," and ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/tonlabs/TVM-linker/tree/740f9f62a4e68c9f515667c109b116f265942d72"},"TVM-linker")," ",(0,i.kt)("inlineCode",{parentName:"p"},"v0.14.51")," without salting is ",(0,i.kt)("inlineCode",{parentName:"p"},"61e5f39a693dc133ea8faf3e80fac069250161b0bced3790c20ae234ce6fd866")),(0,i.kt)("h3",{id:"indexgetinfo"},"Index.getInfo()"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},"function getInfo() external view responsible returns (\n address collection,\n address owner,\n address nft\n);\n")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"collection")," (",(0,i.kt)("inlineCode",{parentName:"li"},"address"),") - collection token contract address"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"owner")," (",(0,i.kt)("inlineCode",{parentName:"li"},"address"),") - token owner contract address"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"nft")," (",(0,i.kt)("inlineCode",{parentName:"li"},"address"),") - token contract address")),(0,i.kt)("h3",{id:"iindexbasisdestruct-1"},"IIndexBasis.destruct()"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},"function destruct(address gasReceiver) external;\n")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"gasReceiver")," (",(0,i.kt)("inlineCode",{parentName:"li"},"address"),") - address of contract that receives all remaining contract balance after ",(0,i.kt)("inlineCode",{parentName:"li"},"selfdestruct()")," call")),(0,i.kt)("h2",{id:"collection"},"Collection"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/standards/TIP/TIP-4/1"},"TIP-4.1")," ",(0,i.kt)("inlineCode",{parentName:"li"},"Collection")," contract must implement the ",(0,i.kt)("inlineCode",{parentName:"li"},"TIP4_3Collection")," interface and ",(0,i.kt)("a",{parentName:"li",href:"/standards/TIP/TIP-6/1"},"TIP-6.1")," interfaces"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/standards/TIP/TIP-4/1"},"TIP-4.1")," ",(0,i.kt)("inlineCode",{parentName:"li"},"Collection")," contract must deploy ",(0,i.kt)("inlineCode",{parentName:"li"},"IndexBasis")," contract after deployment with ",(0,i.kt)("strong",{parentName:"li"},"code salt")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/standards/TIP/TIP-4/1"},"TIP-4.1")," ",(0,i.kt)("inlineCode",{parentName:"li"},"Collection")," contract must ",(0,i.kt)("inlineCode",{parentName:"li"},"destuct()")," ",(0,i.kt)("inlineCode",{parentName:"li"},"IndexBasis")," contracts before collection destruction")),(0,i.kt)("h3",{id:"tip4_3collection"},"TIP4_3Collection"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},"pragma ton-solidity >= 0.58.0;\n\ninterface TIP4_3Collection {\n function indexBasisCode() external view responsible returns (TvmCell code);\n function indexBasisCodeHash() external view responsible returns (uint256 hash);\n function indexCode() external view responsible returns (TvmCell code);\n function indexCodeHash() external view responsible returns (uint256 hash);\n function resolveIndexBasis() external view responsible returns (address indexBasis);\n}\n")),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"NOTE")," The ",(0,i.kt)("a",{parentName:"p",href:"/standards/TIP/TIP-6/1"},"TIP-6.1")," identifier for this interface is ",(0,i.kt)("inlineCode",{parentName:"p"},"0x4387BBFB")),(0,i.kt)("h4",{id:"tip4_3collectionindexbasiscode"},"TIP4_3Collection.indexBasisCode()"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},"function indexBasisCode() external view responsible returns (TvmCell code);\n")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"code")," (",(0,i.kt)("inlineCode",{parentName:"li"},"TvmCell"),") - basis index contract code")),(0,i.kt)("h4",{id:"tip4_3collectionindexbasiscodehash"},"TIP4_3Collection.indexBasisCodeHash()"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},"function indexBasisCodeHash() external view responsible returns (uint256 hash);\n")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"hash")," (",(0,i.kt)("inlineCode",{parentName:"li"},"uint256"),") - basis index contract code hash")),(0,i.kt)("h4",{id:"tip4_3collectionindexcode"},"TIP4_3Collection.indexCode()"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},"function indexCode() external view responsible returns (TvmCell code);\n")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"code")," (",(0,i.kt)("inlineCode",{parentName:"li"},"TvmCell"),") - index contract code")),(0,i.kt)("h4",{id:"tip4_3collectionindexcodehash"},"TIP4_3Collection.indexCodeHash()"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},"function indexCodeHash() external view responsible returns (uint256 hash);\n")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"hash")," (",(0,i.kt)("inlineCode",{parentName:"li"},"uint256"),") - index contract code hash")),(0,i.kt)("h4",{id:"tip4_3collectionindexbasis"},"TIP4_3Collection.indexBasis()"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},"function resolveIndexBasis() external view responsible returns (address indexBasis);\n")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"indexBasis")," (",(0,i.kt)("inlineCode",{parentName:"li"},"address"),") - basis index contract address")),(0,i.kt)("h3",{id:"code-salt-parameters"},"Code salt parameters"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"stamp")," (",(0,i.kt)("inlineCode",{parentName:"li"},"string"),") - stamp that determine type of index. ",(0,i.kt)("inlineCode",{parentName:"li"},'stamp = "nft";')," for all NFT indexes")),(0,i.kt)("h3",{id:"example-of-indexbasis-deployment"},"Example of ",(0,i.kt)("inlineCode",{parentName:"h3"},"IndexBasis")," deployment"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},'function deployIndexBasis(TvmCell codeIndex, address collection, uint128 value) private pure {\n string stamp = "nft";\n TvmBuilder salt;\n salt.store(stamp);\n TvmCell code = tvm.setCodeSalt(codeIndex, salt.toCell());\n TvmCell stateInit = tvm.buildStateInit({\n contr: IndexBasis,\n varInit: {_collection: collection},\n code: code\n });\n new IndexBasis{stateInit: stateInit, value: value}();\n}\n')),(0,i.kt)("h2",{id:"nft"},"NFT"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/standards/TIP/TIP-4/1"},"TIP-4.1")," ",(0,i.kt)("inlineCode",{parentName:"li"},"Collection")," contract must implement the ",(0,i.kt)("inlineCode",{parentName:"li"},"TIP4_3NFT")," interface and ",(0,i.kt)("a",{parentName:"li",href:"/standards/TIP/TIP-6/1"},"TIP-6.1")," interfaces"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/standards/TIP/TIP-4/1"},"TIP-4.1")," ",(0,i.kt)("inlineCode",{parentName:"li"},"NFT")," contract must deploy at least two ",(0,i.kt)("inlineCode",{parentName:"li"},"Index")," contract after deployment with different ",(0,i.kt)("strong",{parentName:"li"},"code salt"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"With zero collection address ",(0,i.kt)("inlineCode",{parentName:"li"},'collection = "0:0000000000000000000000000000000000000000000000000000000000000000"')," in ",(0,i.kt)("strong",{parentName:"li"},"code salt")),(0,i.kt)("li",{parentName:"ul"},"With non-zero collection address ",(0,i.kt)("inlineCode",{parentName:"li"},'collection = "0:3bd8\u2026"')," in ",(0,i.kt)("strong",{parentName:"li"},"code salt")))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/standards/TIP/TIP-4/1"},"TIP-4.1")," ",(0,i.kt)("inlineCode",{parentName:"li"},"NFT")," contract must ",(0,i.kt)("inlineCode",{parentName:"li"},"destuct()")," ",(0,i.kt)("inlineCode",{parentName:"li"},"Index")," before NFT burning"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/standards/TIP/TIP-4/1"},"TIP-4.1")," ",(0,i.kt)("inlineCode",{parentName:"li"},"NFT")," contract must ",(0,i.kt)("inlineCode",{parentName:"li"},"destuct()")," old ",(0,i.kt)("inlineCode",{parentName:"li"},"Index")," contacts and deploy new ",(0,i.kt)("inlineCode",{parentName:"li"},"Index")," contracts if owner changed")),(0,i.kt)("h3",{id:"tip4_3nft"},"TIP4_3NFT"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},"pragma ton-solidity >= 0.58.0;\n\ninterface TIP4_3NFT {\n function indexCode() external view responsible returns (TvmCell code);\n function indexCodeHash() external view responsible returns (uint256 hash);\n function resolveIndex(address collection, address owner) external view responsible returns (address index);\n}\n")),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"NOTE")," The ",(0,i.kt)("a",{parentName:"p",href:"/standards/TIP/TIP-6/1"},"TIP-6.1")," identifier for this interface is ",(0,i.kt)("inlineCode",{parentName:"p"},"0x4DF6250B")),(0,i.kt)("h4",{id:"tip4_3nftindexcode"},"TIP4_3NFT.indexCode()"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},"function indexCode() external view responsible returns (TvmCell code);\n")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"code")," (",(0,i.kt)("inlineCode",{parentName:"li"},"TvmCell"),") - index contract code")),(0,i.kt)("h4",{id:"tip4_3nftindexcodehash"},"TIP4_3NFT.indexCodeHash()"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},"function indexCodeHash() external view responsible returns (uint256 hash);\n")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"hash")," (",(0,i.kt)("inlineCode",{parentName:"li"},"uint256"),") - basis index contract code hash")),(0,i.kt)("h4",{id:"tip4_3nftresolveindex"},"TIP4_3NFT.resolveIndex()"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},"function resolveIndex(address collection, address owner) external view responsible returns (address index);\n")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"collection")," (",(0,i.kt)("inlineCode",{parentName:"li"},"address"),") - collection token contract address"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"owner")," (",(0,i.kt)("inlineCode",{parentName:"li"},"address"),") - token owner contract address"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"index")," (",(0,i.kt)("inlineCode",{parentName:"li"},"address"),") - index contract address")),(0,i.kt)("h3",{id:"code-salt-parameters-1"},"Code salt parameters"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"stamp")," (",(0,i.kt)("inlineCode",{parentName:"li"},"string"),") - stamp that determine type of index. ",(0,i.kt)("inlineCode",{parentName:"li"},'stamp = "nft";')," for all NFT indexes"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"collection")," (",(0,i.kt)("inlineCode",{parentName:"li"},"address"),") - collection token contract address"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"owner")," (",(0,i.kt)("inlineCode",{parentName:"li"},"address"),") - token owner contract address")),(0,i.kt)("h3",{id:"example-of-index-deployment"},"Example of ",(0,i.kt)("inlineCode",{parentName:"h3"},"Index")," deployment"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},'function deployIndex(TvmCell codeIndex, address nft, address collection, address owner, uint128 value) private pure {\n string stamp = "nft";\n TvmBuilder salt;\n salt.store(stamp, collection, owner);\n TvmCell code = tvm.setCodeSalt(codeIndex, salt.toCell());\n TvmCell stateInit = tvm.buildStateInit({\n contr: Index,\n varInit: {_nft: nft},\n code: code\n });\n new Index{stateInit: stateInit, value: value}();\n}\n')),(0,i.kt)("h2",{id:"example-of-dapp-query-for-search-by-index"},"Example of dApp query for search by index"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-graphql"},'query {\n accounts( \n filter: {\n code_hash: {\n eq: "207dc560c5956de1a2c1479356f8f3ee70a59767db2bf4788b1d61ad42cdad82"\n }\n }\n ){\n id\n }\n}\n')),(0,i.kt)("p",null,"Part of response example"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-json"},'{\n "data": {\n "accounts": [\n {\n "id": "0:000001b0422f6a7069786fa9a27aa7bb8042f58e1df01dfebc51dcb2baa5eeae"\n },\n {\n "id": "0:00022772794253c1bf8cb4fa59d6161d574033c13d881f3eea14675b911e61b0"\n }\n ]\n }\n}\n')),(0,i.kt)("h2",{id:"source-code"},"Source code"),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://github.com/numizteam/indexes"},"link")),(0,i.kt)("h2",{id:"visualization"},"Visualization"),(0,i.kt)("h3",{id:"legend"},"Legend"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Legend",src:t(1383).Z,width:"356",height:"524"})),(0,i.kt)("h3",{id:"indexbasis-deployment-for-collection"},(0,i.kt)("inlineCode",{parentName:"h3"},"IndexBasis")," deployment for ",(0,i.kt)("inlineCode",{parentName:"h3"},"Collection")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Index Basis",src:t(6885).Z,width:"524",height:"524"})),(0,i.kt)("h3",{id:"index-contracts-deployment-for-nft"},(0,i.kt)("inlineCode",{parentName:"h3"},"Index")," contracts deployment for ",(0,i.kt)("inlineCode",{parentName:"h3"},"NFT")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Index deploy",src:t(2185).Z,width:"841",height:"711"})),(0,i.kt)("h3",{id:"redeploy-index-contracts-after-changeowner"},"Redeploy ",(0,i.kt)("inlineCode",{parentName:"h3"},"Index")," contracts after ",(0,i.kt)("inlineCode",{parentName:"h3"},"changeOwner")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Index redeploy",src:t(2070).Z,width:"384",height:"524"})),(0,i.kt)("h2",{id:"references"},"References"),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"The original ",(0,i.kt)("a",{parentName:"p",href:"https://docs.everscale.network/standard/TIP-4.3"},"TIP-4.3")," standard was developed and maintained by the Everscale network community.")))}p.isMDXComponent=!0},6885:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/index1-d97b3dd737907e1d86a2e95d89860c75.svg"},2185:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/index2-5834cd0b643c5df86c318bc6b137a6fc.svg"},2070:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/index3-1903b9c01bf60a886e288c3be32822d4.svg"},1383:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/legend1-3de5d1dd03117f26abf5cb7f454c8d39.svg"}}]); \ No newline at end of file diff --git a/assets/js/08a2cefb.8ec4e321.js b/assets/js/08a2cefb.8ec4e321.js new file mode 100644 index 000000000..8659e5a2d --- /dev/null +++ b/assets/js/08a2cefb.8ec4e321.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkve_ps=self.webpackChunkve_ps||[]).push([[8812],{4137:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>m});var a=t(7294);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function l(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function r(e){for(var n=1;n=0||(i[t]=e[t]);return i}(e,n);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}var d=a.createContext({}),s=function(e){var n=a.useContext(d),t=n;return e&&(t="function"==typeof e?e(n):r(r({},n),e)),t},c=function(e){var n=s(e.components);return a.createElement(d.Provider,{value:n},e.children)},p={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},u=a.forwardRef((function(e,n){var t=e.components,i=e.mdxType,l=e.originalType,d=e.parentName,c=o(e,["components","mdxType","originalType","parentName"]),u=s(t),m=i,k=u["".concat(d,".").concat(m)]||u[m]||p[m]||l;return t?a.createElement(k,r(r({ref:n},c),{},{components:t})):a.createElement(k,r({ref:n},c))}));function m(e,n){var t=arguments,i=n&&n.mdxType;if("string"==typeof e||i){var l=t.length,r=new Array(l);r[0]=u;var o={};for(var d in n)hasOwnProperty.call(n,d)&&(o[d]=n[d]);o.originalType=e,o.mdxType="string"==typeof e?e:i,r[1]=o;for(var s=2;s{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>p,frontMatter:()=>l,metadata:()=>o,toc:()=>s});var a=t(7462),i=(t(7294),t(4137));const l={sidebar_position:3,sidebar_label:"TIP-4.3"},r="Non-Fungible Token on-chain indexes (TIP-4.3)",o={unversionedId:"standards/TIP/TIP-4/3",id:"standards/TIP/TIP-4/3",title:"Non-Fungible Token on-chain indexes (TIP-4.3)",description:"Requires: TIP-4.1",source:"@site/docs/standards/TIP/TIP-4/3.md",sourceDirName:"standards/TIP/TIP-4",slug:"/standards/TIP/TIP-4/3",permalink:"/standards/TIP/TIP-4/3",draft:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3,sidebar_label:"TIP-4.3"},sidebar:"standardSidebar",previous:{title:"4.2.2 New JSON Metadata",permalink:"/standards/TIP/TIP-4/TIP-4.2.2"},next:{title:"TIP-4.4",permalink:"/standards/TIP/TIP-4/4"}},d={},s=[{value:"Abstract",id:"abstract",level:2},{value:"Motivation",id:"motivation",level:2},{value:"Specification",id:"specification",level:2},{value:"Contracts",id:"contracts",level:2},{value:"IIndexBasis",id:"iindexbasis",level:2},{value:"IndexBasis",id:"indexbasis",level:2},{value:"IIndexBasis.getInfo()",id:"iindexbasisgetinfo",level:3},{value:"IIndexBasis.destruct()",id:"iindexbasisdestruct",level:3},{value:"IIndex",id:"iindex",level:2},{value:"Index",id:"index",level:2},{value:"Index.getInfo()",id:"indexgetinfo",level:3},{value:"IIndexBasis.destruct()",id:"iindexbasisdestruct-1",level:3},{value:"Collection",id:"collection",level:2},{value:"TIP4_3Collection",id:"tip4_3collection",level:3},{value:"TIP4_3Collection.indexBasisCode()",id:"tip4_3collectionindexbasiscode",level:4},{value:"TIP4_3Collection.indexBasisCodeHash()",id:"tip4_3collectionindexbasiscodehash",level:4},{value:"TIP4_3Collection.indexCode()",id:"tip4_3collectionindexcode",level:4},{value:"TIP4_3Collection.indexCodeHash()",id:"tip4_3collectionindexcodehash",level:4},{value:"TIP4_3Collection.indexBasis()",id:"tip4_3collectionindexbasis",level:4},{value:"Code salt parameters",id:"code-salt-parameters",level:3},{value:"Example of IndexBasis deployment",id:"example-of-indexbasis-deployment",level:3},{value:"NFT",id:"nft",level:2},{value:"TIP4_3NFT",id:"tip4_3nft",level:3},{value:"TIP4_3NFT.indexCode()",id:"tip4_3nftindexcode",level:4},{value:"TIP4_3NFT.indexCodeHash()",id:"tip4_3nftindexcodehash",level:4},{value:"TIP4_3NFT.resolveIndex()",id:"tip4_3nftresolveindex",level:4},{value:"Code salt parameters",id:"code-salt-parameters-1",level:3},{value:"Example of Index deployment",id:"example-of-index-deployment",level:3},{value:"Example of dApp query for search by index",id:"example-of-dapp-query-for-search-by-index",level:2},{value:"Source code",id:"source-code",level:2},{value:"Visualization",id:"visualization",level:2},{value:"Legend",id:"legend",level:3},{value:"IndexBasis deployment for Collection",id:"indexbasis-deployment-for-collection",level:3},{value:"Index contracts deployment for NFT",id:"index-contracts-deployment-for-nft",level:3},{value:"Redeploy Index contracts after changeOwner",id:"redeploy-index-contracts-after-changeowner",level:3},{value:"References",id:"references",level:2}],c={toc:s};function p(e){let{components:n,...l}=e;return(0,i.kt)("wrapper",(0,a.Z)({},c,l,{components:n,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"non-fungible-token-on-chain-indexes-tip-43"},"Non-Fungible Token on-chain indexes (TIP-4.3)"),(0,i.kt)("p",null,"Requires: ",(0,i.kt)("a",{parentName:"p",href:"/standards/TIP/TIP-4/1"},"TIP-4.1"),"\nRequires: ",(0,i.kt)("a",{parentName:"p",href:"/standards/TIP/TIP-6/1"},"TIP-6.1")),(0,i.kt)("h2",{id:"abstract"},"Abstract"),(0,i.kt)("p",null,"Using the Index contract code, you can find all your NFT with one ",(0,i.kt)("a",{parentName:"p",href:"https://gql.venom.foundation/graphql"},"dApp")," query.\nThis makes blockchain application less dependent on different off-chain parsers and indexers\tThis makes blockchain application less dependent on different off-chain parsers and indexers."),(0,i.kt)("p",null,"On-chain Indexes solves easy and fast searching any data in blockchain.\nThis document shows standard for basic query.\nAny developer can get an idea of this solution and realize his own on-chain index."),(0,i.kt)("h2",{id:"motivation"},"Motivation"),(0,i.kt)("p",null,"A standard interface allows search all Collection and all NFT by owner using base ",(0,i.kt)("a",{parentName:"p",href:"https://gql.venom.foundation/graphql"},"dApp")," functionality."),(0,i.kt)("h2",{id:"specification"},"Specification"),(0,i.kt)("p",null,"The keywords \u201cMUST\u201d, \u201cMUST NOT\u201d, \u201cREQUIRED\u201d, \u201cSHALL\u201d, \u201cSHALL NOT\u201d, \u201cSHOULD\u201d, \u201cSHOULD NOT\u201d, \u201cRECOMMENDED\u201d, \u201cMAY\u201d, and \u201cOPTIONAL\u201d in this document are to be interpreted as described in ",(0,i.kt)("a",{parentName:"p",href:"https://datatracker.ietf.org/doc/html/rfc2119"},"RFC 2119")),(0,i.kt)("h2",{id:"contracts"},"Contracts"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Collection")," - ",(0,i.kt)("a",{parentName:"li",href:"/standards/TIP/TIP-4/1"},"TIP4.1")," contract that minted token"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"NFT")," - ",(0,i.kt)("a",{parentName:"li",href:"/standards/TIP/TIP-4/1"},"TIP4.1")," contract that store token information"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"IndexBasis")," - contract, that helps to find all collections by the ",(0,i.kt)("strong",{parentName:"li"},"code hash")," of which"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Index")," - contract, that helps to find:",(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"All user tokens in current collection using ",(0,i.kt)("strong",{parentName:"li"},"owner address")," and ",(0,i.kt)("strong",{parentName:"li"},"collection address")),(0,i.kt)("li",{parentName:"ul"},"All user tokens in all collections using ",(0,i.kt)("strong",{parentName:"li"},"owner address"))))),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"code")," of ",(0,i.kt)("inlineCode",{parentName:"p"},"IndexBasis")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"Index")," contracts and ",(0,i.kt)("strong",{parentName:"p"},"code hash")," of contracts is fixed and ",(0,i.kt)("strong",{parentName:"p"},"CANNOT BE CHANGED")),(0,i.kt)("h2",{id:"iindexbasis"},"IIndexBasis"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},"pragma ton-solidity >= 0.58.0;\n\ninterface IIndexBasis {\n function getInfo() external view responsible returns (address collection);\n function destruct(address gasReceiver) external;\n}\n")),(0,i.kt)("h2",{id:"indexbasis"},"IndexBasis"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},"pragma ton-solidity >= 0.58.0;\n\nimport 'IIndexBasis.sol';\n\n/**\n * Errors\n * 101 - Method for collection only\n **/\ncontract IndexBasis is IIndexBasis {\n address static _collection;\n\n modifier onlyCollection() {\n require(msg.sender == _collection, 101, \"Method for collection only\");\n tvm.accept();\n _;\n }\n\n constructor() public onlyCollection {}\n\n function getInfo() override public view responsible returns (address collection) {\n return {value: 0, flag: 64} _collection;\n }\n\n function destruct(address gasReceiver) override public onlyCollection {\n selfdestruct(gasReceiver);\n }\n}\n")),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Code hash")," of ",(0,i.kt)("inlineCode",{parentName:"p"},"IndexBasis")," compiled by ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/tonlabs/TON-Solidity-Compiler/tree/a222452e27aacff14fdf2fff356542843a2a8d1c"},"TVMCompiler")," ",(0,i.kt)("inlineCode",{parentName:"p"},"v0.58.2")," and ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/tonlabs/TVM-linker/tree/740f9f62a4e68c9f515667c109b116f265942d72"},"TVM-linker")," ",(0,i.kt)("inlineCode",{parentName:"p"},"v0.14.51")," without salting is ",(0,i.kt)("inlineCode",{parentName:"p"},"2359f897c9527073b1c95140c670089aa5ab825f5fd1bd453db803fbab47def2")),(0,i.kt)("h3",{id:"iindexbasisgetinfo"},"IIndexBasis.getInfo()"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},"function getInfo() external view responsible returns (address collection);\n")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"collection")," (",(0,i.kt)("inlineCode",{parentName:"li"},"address"),") - collection token contract address")),(0,i.kt)("h3",{id:"iindexbasisdestruct"},"IIndexBasis.destruct()"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},"function destruct(address gasReceiver) external;\n")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"gasReceiver")," (",(0,i.kt)("inlineCode",{parentName:"li"},"address"),") - address of contract that receives all remaining contract balance after ",(0,i.kt)("inlineCode",{parentName:"li"},"selfdestruct()")," call")),(0,i.kt)("h2",{id:"iindex"},"IIndex"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},"pragma ton-solidity >= 0.58.0;\n\ninterface IIndex {\n function getInfo() external view responsible returns (\n address collection,\n address owner,\n address nft\n );\n function destruct(address gasReceiver) external;\n}\n")),(0,i.kt)("h2",{id:"index"},"Index"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},"pragma ton-solidity >= 0.58.0;\n\nimport 'IIndex.sol';\n\n/**\n * Errors\n * 101 - Method for NFT only\n * 102 - Salt doesn't contain any value\n **/\ncontract Index is IIndex {\n address static _nft;\n \n address _collection;\n address _owner;\n\n constructor(address collection) public {\n optional(TvmCell) salt = tvm.codeSalt(tvm.code());\n require(salt.hasValue(), 102, \"Salt doesn't contain any value\");\n (, address collection_, address owner) = salt\n .get()\n .toSlice()\n .decode(string, address, address);\n require(msg.sender == _nft);\n tvm.accept();\n _collection = collection_;\n _owner = owner;\n if (collection_.value == 0) {\n _collection = collection;\n }\n }\n\n function getInfo() override public view responsible returns (\n address collection,\n address owner,\n address nft\n ) {\n return {value: 0, flag: 64} (\n _collection,\n _owner,\n _nft\n );\n }\n\n function destruct(address gasReceiver) override public {\n require(msg.sender == _nft, 101, \"Method for NFT only\");\n selfdestruct(gasReceiver);\n }\n}\n")),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Code hash")," of ",(0,i.kt)("inlineCode",{parentName:"p"},"Index")," compiled by ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/tonlabs/TON-Solidity-Compiler/tree/a222452e27aacff14fdf2fff356542843a2a8d1c"},"TVMCompiler")," ",(0,i.kt)("inlineCode",{parentName:"p"},"v0.58.2")," and ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/tonlabs/TVM-linker/tree/740f9f62a4e68c9f515667c109b116f265942d72"},"TVM-linker")," ",(0,i.kt)("inlineCode",{parentName:"p"},"v0.14.51")," without salting is ",(0,i.kt)("inlineCode",{parentName:"p"},"61e5f39a693dc133ea8faf3e80fac069250161b0bced3790c20ae234ce6fd866")),(0,i.kt)("h3",{id:"indexgetinfo"},"Index.getInfo()"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},"function getInfo() external view responsible returns (\n address collection,\n address owner,\n address nft\n);\n")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"collection")," (",(0,i.kt)("inlineCode",{parentName:"li"},"address"),") - collection token contract address"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"owner")," (",(0,i.kt)("inlineCode",{parentName:"li"},"address"),") - token owner contract address"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"nft")," (",(0,i.kt)("inlineCode",{parentName:"li"},"address"),") - token contract address")),(0,i.kt)("h3",{id:"iindexbasisdestruct-1"},"IIndexBasis.destruct()"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},"function destruct(address gasReceiver) external;\n")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"gasReceiver")," (",(0,i.kt)("inlineCode",{parentName:"li"},"address"),") - address of contract that receives all remaining contract balance after ",(0,i.kt)("inlineCode",{parentName:"li"},"selfdestruct()")," call")),(0,i.kt)("h2",{id:"collection"},"Collection"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/standards/TIP/TIP-4/1"},"TIP-4.1")," ",(0,i.kt)("inlineCode",{parentName:"li"},"Collection")," contract must implement the ",(0,i.kt)("inlineCode",{parentName:"li"},"TIP4_3Collection")," interface and ",(0,i.kt)("a",{parentName:"li",href:"/standards/TIP/TIP-6/1"},"TIP-6.1")," interfaces"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/standards/TIP/TIP-4/1"},"TIP-4.1")," ",(0,i.kt)("inlineCode",{parentName:"li"},"Collection")," contract must deploy ",(0,i.kt)("inlineCode",{parentName:"li"},"IndexBasis")," contract after deployment with ",(0,i.kt)("strong",{parentName:"li"},"code salt")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/standards/TIP/TIP-4/1"},"TIP-4.1")," ",(0,i.kt)("inlineCode",{parentName:"li"},"Collection")," contract must ",(0,i.kt)("inlineCode",{parentName:"li"},"destuct()")," ",(0,i.kt)("inlineCode",{parentName:"li"},"IndexBasis")," contracts before collection destruction")),(0,i.kt)("h3",{id:"tip4_3collection"},"TIP4_3Collection"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},"pragma ton-solidity >= 0.58.0;\n\ninterface TIP4_3Collection {\n function indexBasisCode() external view responsible returns (TvmCell code);\n function indexBasisCodeHash() external view responsible returns (uint256 hash);\n function indexCode() external view responsible returns (TvmCell code);\n function indexCodeHash() external view responsible returns (uint256 hash);\n function resolveIndexBasis() external view responsible returns (address indexBasis);\n}\n")),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"NOTE")," The ",(0,i.kt)("a",{parentName:"p",href:"/standards/TIP/TIP-6/1"},"TIP-6.1")," identifier for this interface is ",(0,i.kt)("inlineCode",{parentName:"p"},"0x4387BBFB")),(0,i.kt)("h4",{id:"tip4_3collectionindexbasiscode"},"TIP4_3Collection.indexBasisCode()"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},"function indexBasisCode() external view responsible returns (TvmCell code);\n")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"code")," (",(0,i.kt)("inlineCode",{parentName:"li"},"TvmCell"),") - basis index contract code")),(0,i.kt)("h4",{id:"tip4_3collectionindexbasiscodehash"},"TIP4_3Collection.indexBasisCodeHash()"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},"function indexBasisCodeHash() external view responsible returns (uint256 hash);\n")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"hash")," (",(0,i.kt)("inlineCode",{parentName:"li"},"uint256"),") - basis index contract code hash")),(0,i.kt)("h4",{id:"tip4_3collectionindexcode"},"TIP4_3Collection.indexCode()"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},"function indexCode() external view responsible returns (TvmCell code);\n")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"code")," (",(0,i.kt)("inlineCode",{parentName:"li"},"TvmCell"),") - index contract code")),(0,i.kt)("h4",{id:"tip4_3collectionindexcodehash"},"TIP4_3Collection.indexCodeHash()"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},"function indexCodeHash() external view responsible returns (uint256 hash);\n")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"hash")," (",(0,i.kt)("inlineCode",{parentName:"li"},"uint256"),") - index contract code hash")),(0,i.kt)("h4",{id:"tip4_3collectionindexbasis"},"TIP4_3Collection.indexBasis()"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},"function resolveIndexBasis() external view responsible returns (address indexBasis);\n")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"indexBasis")," (",(0,i.kt)("inlineCode",{parentName:"li"},"address"),") - basis index contract address")),(0,i.kt)("h3",{id:"code-salt-parameters"},"Code salt parameters"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"stamp")," (",(0,i.kt)("inlineCode",{parentName:"li"},"string"),") - stamp that determine type of index. ",(0,i.kt)("inlineCode",{parentName:"li"},'stamp = "nft";')," for all NFT indexes")),(0,i.kt)("h3",{id:"example-of-indexbasis-deployment"},"Example of ",(0,i.kt)("inlineCode",{parentName:"h3"},"IndexBasis")," deployment"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},'function deployIndexBasis(TvmCell codeIndex, address collection, uint128 value) private pure {\n string stamp = "nft";\n TvmBuilder salt;\n salt.store(stamp);\n TvmCell code = tvm.setCodeSalt(codeIndex, salt.toCell());\n TvmCell stateInit = tvm.buildStateInit({\n contr: IndexBasis,\n varInit: {_collection: collection},\n code: code\n });\n new IndexBasis{stateInit: stateInit, value: value}();\n}\n')),(0,i.kt)("h2",{id:"nft"},"NFT"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/standards/TIP/TIP-4/1"},"TIP-4.1")," ",(0,i.kt)("inlineCode",{parentName:"li"},"Collection")," contract must implement the ",(0,i.kt)("inlineCode",{parentName:"li"},"TIP4_3NFT")," interface and ",(0,i.kt)("a",{parentName:"li",href:"/standards/TIP/TIP-6/1"},"TIP-6.1")," interfaces"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/standards/TIP/TIP-4/1"},"TIP-4.1")," ",(0,i.kt)("inlineCode",{parentName:"li"},"NFT")," contract must deploy at least two ",(0,i.kt)("inlineCode",{parentName:"li"},"Index")," contract after deployment with different ",(0,i.kt)("strong",{parentName:"li"},"code salt"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"With zero collection address ",(0,i.kt)("inlineCode",{parentName:"li"},'collection = "0:0000000000000000000000000000000000000000000000000000000000000000"')," in ",(0,i.kt)("strong",{parentName:"li"},"code salt")),(0,i.kt)("li",{parentName:"ul"},"With non-zero collection address ",(0,i.kt)("inlineCode",{parentName:"li"},'collection = "0:3bd8\u2026"')," in ",(0,i.kt)("strong",{parentName:"li"},"code salt")))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/standards/TIP/TIP-4/1"},"TIP-4.1")," ",(0,i.kt)("inlineCode",{parentName:"li"},"NFT")," contract must ",(0,i.kt)("inlineCode",{parentName:"li"},"destuct()")," ",(0,i.kt)("inlineCode",{parentName:"li"},"Index")," before NFT burning"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/standards/TIP/TIP-4/1"},"TIP-4.1")," ",(0,i.kt)("inlineCode",{parentName:"li"},"NFT")," contract must ",(0,i.kt)("inlineCode",{parentName:"li"},"destuct()")," old ",(0,i.kt)("inlineCode",{parentName:"li"},"Index")," contacts and deploy new ",(0,i.kt)("inlineCode",{parentName:"li"},"Index")," contracts if owner changed")),(0,i.kt)("h3",{id:"tip4_3nft"},"TIP4_3NFT"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},"pragma ton-solidity >= 0.58.0;\n\ninterface TIP4_3NFT {\n function indexCode() external view responsible returns (TvmCell code);\n function indexCodeHash() external view responsible returns (uint256 hash);\n function resolveIndex(address collection, address owner) external view responsible returns (address index);\n}\n")),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"NOTE")," The ",(0,i.kt)("a",{parentName:"p",href:"/standards/TIP/TIP-6/1"},"TIP-6.1")," identifier for this interface is ",(0,i.kt)("inlineCode",{parentName:"p"},"0x4DF6250B")),(0,i.kt)("h4",{id:"tip4_3nftindexcode"},"TIP4_3NFT.indexCode()"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},"function indexCode() external view responsible returns (TvmCell code);\n")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"code")," (",(0,i.kt)("inlineCode",{parentName:"li"},"TvmCell"),") - index contract code")),(0,i.kt)("h4",{id:"tip4_3nftindexcodehash"},"TIP4_3NFT.indexCodeHash()"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},"function indexCodeHash() external view responsible returns (uint256 hash);\n")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"hash")," (",(0,i.kt)("inlineCode",{parentName:"li"},"uint256"),") - basis index contract code hash")),(0,i.kt)("h4",{id:"tip4_3nftresolveindex"},"TIP4_3NFT.resolveIndex()"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},"function resolveIndex(address collection, address owner) external view responsible returns (address index);\n")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"collection")," (",(0,i.kt)("inlineCode",{parentName:"li"},"address"),") - collection token contract address"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"owner")," (",(0,i.kt)("inlineCode",{parentName:"li"},"address"),") - token owner contract address"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"index")," (",(0,i.kt)("inlineCode",{parentName:"li"},"address"),") - index contract address")),(0,i.kt)("h3",{id:"code-salt-parameters-1"},"Code salt parameters"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"stamp")," (",(0,i.kt)("inlineCode",{parentName:"li"},"string"),") - stamp that determine type of index. ",(0,i.kt)("inlineCode",{parentName:"li"},'stamp = "nft";')," for all NFT indexes"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"collection")," (",(0,i.kt)("inlineCode",{parentName:"li"},"address"),") - collection token contract address"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"owner")," (",(0,i.kt)("inlineCode",{parentName:"li"},"address"),") - token owner contract address")),(0,i.kt)("h3",{id:"example-of-index-deployment"},"Example of ",(0,i.kt)("inlineCode",{parentName:"h3"},"Index")," deployment"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-solidity"},'function deployIndex(TvmCell codeIndex, address nft, address collection, address owner, uint128 value) private pure {\n string stamp = "nft";\n TvmBuilder salt;\n salt.store(stamp, collection, owner);\n TvmCell code = tvm.setCodeSalt(codeIndex, salt.toCell());\n TvmCell stateInit = tvm.buildStateInit({\n contr: Index,\n varInit: {_nft: nft},\n code: code\n });\n new Index{stateInit: stateInit, value: value}();\n}\n')),(0,i.kt)("h2",{id:"example-of-dapp-query-for-search-by-index"},"Example of dApp query for search by index"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-graphql"},'query {\n accounts( \n filter: {\n code_hash: {\n eq: "207dc560c5956de1a2c1479356f8f3ee70a59767db2bf4788b1d61ad42cdad82"\n }\n }\n ){\n id\n }\n}\n')),(0,i.kt)("p",null,"Part of response example"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-json"},'{\n "data": {\n "accounts": [\n {\n "id": "0:000001b0422f6a7069786fa9a27aa7bb8042f58e1df01dfebc51dcb2baa5eeae"\n },\n {\n "id": "0:00022772794253c1bf8cb4fa59d6161d574033c13d881f3eea14675b911e61b0"\n }\n ]\n }\n}\n')),(0,i.kt)("h2",{id:"source-code"},"Source code"),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://github.com/numizteam/indexes"},"link")),(0,i.kt)("h2",{id:"visualization"},"Visualization"),(0,i.kt)("h3",{id:"legend"},"Legend"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Legend",src:t(1383).Z,width:"356",height:"524"})),(0,i.kt)("h3",{id:"indexbasis-deployment-for-collection"},(0,i.kt)("inlineCode",{parentName:"h3"},"IndexBasis")," deployment for ",(0,i.kt)("inlineCode",{parentName:"h3"},"Collection")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Index Basis",src:t(6885).Z,width:"524",height:"524"})),(0,i.kt)("h3",{id:"index-contracts-deployment-for-nft"},(0,i.kt)("inlineCode",{parentName:"h3"},"Index")," contracts deployment for ",(0,i.kt)("inlineCode",{parentName:"h3"},"NFT")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Index deploy",src:t(2185).Z,width:"841",height:"711"})),(0,i.kt)("h3",{id:"redeploy-index-contracts-after-changeowner"},"Redeploy ",(0,i.kt)("inlineCode",{parentName:"h3"},"Index")," contracts after ",(0,i.kt)("inlineCode",{parentName:"h3"},"changeOwner")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Index redeploy",src:t(2070).Z,width:"384",height:"524"})),(0,i.kt)("h2",{id:"references"},"References"),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"The original ",(0,i.kt)("a",{parentName:"p",href:"https://docs.everscale.network/standard/TIP-4.3"},"TIP-4.3")," standard was developed and maintained by the Everscale network community.")))}p.isMDXComponent=!0},6885:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/index1-d97b3dd737907e1d86a2e95d89860c75.svg"},2185:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/index2-5834cd0b643c5df86c318bc6b137a6fc.svg"},2070:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/index3-1903b9c01bf60a886e288c3be32822d4.svg"},1383:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/legend1-3de5d1dd03117f26abf5cb7f454c8d39.svg"}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.7c4cd66d.js b/assets/js/935f2afb.7c4cd66d.js deleted file mode 100644 index 8609147de..000000000 --- a/assets/js/935f2afb.7c4cd66d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkve_ps=self.webpackChunkve_ps||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docsSidebar":[{"type":"category","label":"General","collapsible":false,"collapsed":false,"items":[{"type":"link","label":"Getting Started","href":"/general/readme","docId":"start/general/welcome-to-venom"},{"type":"link","label":"What\'s New","href":"/general/whats-new","docId":"start/general/whats-new"},{"type":"link","label":"Ecosystem","href":"/general/ecosystem","docId":"start/general/ecosystem"},{"type":"category","label":"Wallet","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Create a New Account with Venom Wallet","href":"/general/wallet/create-a-new-wallet-account","docId":"start/general/wallet/creating-new-wallet"},{"type":"link","label":"How to Sign in into the Wallet","href":"/general/wallet/how-to-sign-in-into-the-wallet","docId":"start/general/wallet/how-to-sign-in-into-the-wallet"},{"type":"category","label":"The Main Screen","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Send","href":"/general/wallet/send","docId":"start/general/wallet/the-main/send"},{"type":"link","label":"Transactions","href":"/general/wallet/transactions","docId":"start/general/wallet/the-main/transactions"}],"href":"/general/wallet/the-main-screen"},{"type":"category","label":"The Multisignature Account","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Creating a Multisignature Account","href":"/general/wallet/creating-a-multisignature-account","docId":"start/general/wallet/multisignature-account/creating-a-multisignature-account"},{"type":"link","label":"Creating Tracking Account","href":"/general/wallet/creating-tracking-account","docId":"start/general/wallet/multisignature-account/creating-tracking-account"},{"type":"link","label":"Sending tokens from the Multisignature Account","href":"/general/wallet/sending-tokens-from-the-multisignature-account","docId":"start/general/wallet/multisignature-account/sending-tokens-from-the-multisignature-account"}]},{"type":"link","label":"Manage seeds and accounts","href":"/general/wallet/manage-seeds-and-accounts","docId":"start/general/wallet/manage-seeds-and-accounts"},{"type":"category","label":"The Ledger","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Installing Venom on Ledger Live","href":"/general/wallet/installing-ledger-app","docId":"start/general/wallet/the-ledger/installing-everscale-on-ledger-live"}],"href":"/general/wallet/the-ledger"},{"type":"link","label":"How to Create a Backup File","href":"/general/wallet/hot-to-create-a-backup-file","docId":"start/general/wallet/how-to-create-a-backup-file"}]},{"type":"link","label":"Balance Transfers","href":"/general/balance-transfers","docId":"start/general/balance-transfers"},{"type":"link","label":"Community","href":"/general/community","docId":"start/general/community"},{"type":"link","label":"Presskit","href":"/general/presskit","docId":"start/general/presskit"},{"type":"link","label":"Developer Program","href":"/general/developer-programm","docId":"start/general/developer-programm"}]},{"type":"category","label":"Learn","collapsible":false,"collapsed":false,"items":[{"type":"link","label":"Glossary","href":"/learn/glossary","docId":"start/learn/glossary"},{"type":"link","label":"Tokens and Assets","href":"/learn/tokens-and-assets","docId":"start/learn/tokens-and-assets"},{"type":"link","label":"Architecture","href":"/learn/architecture","docId":"start/learn/architecture"},{"type":"link","label":"Consensus","href":"/learn/consensus","docId":"start/learn/consensus"},{"type":"link","label":"Threaded Virtual Machine","href":"/learn/tvm","docId":"start/learn/threaded-virtual-machine"},{"type":"link","label":"Accounts","href":"/learn/accounts","docId":"start/learn/accounts"},{"type":"link","label":"Messages and Transactions","href":"/learn/messages-and-transactions","docId":"start/learn/messages-and-transactions"},{"type":"link","label":"Gas and fees","href":"/learn/transaction-fees","docId":"start/learn/gas-and-fees"}]},{"type":"category","label":"Maintain","collapsible":false,"collapsed":false,"items":[{"type":"link","label":"Network Maintainers","href":"/maintain/network-maintainers","docId":"start/maintain/network-maintainers"},{"type":"link","label":"How to run a Venom validator node","href":"/start/maintain/how-to-become-a-validator","docId":"start/maintain/how-to-become-a-validator"}]}],"buildSidebar":[{"type":"link","label":"Quick start developing on Venom testnet","href":"/build/quick-start-on-testnet","docId":"build/quick-start-on-testnet"},{"type":"category","label":"Development Guides","collapsible":false,"collapsed":false,"items":[{"type":"link","label":"Comparing Ethereum vs. Venom architectures","href":"/build/development-guides/comparing-of-ethereum-vs-venom-architectures","docId":"build/development-guides/comparing-of-ethereum-vs-venom-architectures"},{"type":"link","label":"Setting Up The Venom Smart Contract Development Environment","href":"/build/development-guides/setting-up-the-venom-smart-contract-development-environment","docId":"build/development-guides/setting-up-the-venom-smart-contract-development-environment"},{"type":"category","label":"How to create your own fungible TIP-3 token","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Fungible tokens in Venom network","href":"/build/development-guides/how-to-create-your-own-fungible-tip-3-token/fungible-tokens-in-venom-network","docId":"build/development-guides/how-to-create-your-own-fungible-tip-3-token/fungible-tokens-in-venom-network"},{"type":"link","label":"Quick start developing with TIP-3","href":"/build/development-guides/how-to-create-your-own-fungible-tip-3-token/quick-start-developing-with-tip-3","docId":"build/development-guides/how-to-create-your-own-fungible-tip-3-token/quick-start-developing-with-tip-3"},{"type":"category","label":"Venom In Action \ud83d\ude80","collapsible":false,"collapsed":false,"items":[{"type":"link","label":"Simple Tokensale","href":"/build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/simple-tokensale","docId":"build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/simple-tokensale"},{"type":"link","label":"Extend our Tokensale with frontend","href":"/build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/extend-our-tokensale-with-frontend","docId":"build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/extend-our-tokensale-with-frontend"},{"type":"link","label":"Going Global","href":"/build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/going-global","docId":"build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/going-global"},{"type":"link","label":"Ways of code enhancing","href":"/build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/ways-of-code-enhancing","docId":"build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/ways-of-code-enhancing"}]}]},{"type":"category","label":"Developing of simple voting system","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Voting system basics","href":"/build/development-guides/developing-of-simple-voting-system/voting-system-basics","docId":"build/development-guides/developing-of-simple-voting-system/voting-system-basics"},{"type":"category","label":"Venom In Action \ud83d\ude80","collapsible":false,"collapsed":false,"items":[{"type":"link","label":"Voting system contracts","href":"/build/development-guides/developing-of-simple-voting-system/venom-in-action/voting-system-contracts","docId":"build/development-guides/developing-of-simple-voting-system/venom-in-action/voting-system-contracts"},{"type":"link","label":"Ways of code enhancing","href":"/build/development-guides/developing-of-simple-voting-system/venom-in-action/ways-of-code-enhancing","docId":"build/development-guides/developing-of-simple-voting-system/venom-in-action/ways-of-code-enhancing"},{"type":"link","label":"Extend our voting system with backend","href":"/build/development-guides/developing-of-simple-voting-system/venom-in-action/extend-our-voting-system-with-backend","docId":"build/development-guides/developing-of-simple-voting-system/venom-in-action/extend-our-voting-system-with-backend"}]}]},{"type":"category","label":"How to create your own non-fungible TIP-4 token","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Non-Fungible tokens in Venom network","href":"/build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/non-fungible-tokens-in-venom-network","docId":"build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/non-fungible-tokens-in-venom-network"},{"type":"link","label":"Quick start developing with TIP-4","href":"/build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/quick-start-developing-with-tip-4","docId":"build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/quick-start-developing-with-tip-4"},{"type":"category","label":"Venom In Action \ud83d\ude80","collapsible":false,"collapsed":false,"items":[{"type":"link","label":"Simple NFT auction","href":"/build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/simple-nft-auction","docId":"build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/simple-nft-auction"},{"type":"link","label":"Frontend for NFT collection","href":"/build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/frontend-for-nft-collection","docId":"build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/frontend-for-nft-collection"},{"type":"link","label":"Frontend for NFT auction","href":"/build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/frontend-for-nft-auction","docId":"build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/frontend-for-nft-auction"}]}]},{"type":"category","label":"Using Ever SDK and developer tools to work with Venom","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Setting up Wallet Account","href":"/build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/setting-up-wallet-account","docId":"build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/setting-up-wallet-account"},{"type":"link","label":"Sending transactions in Venom","href":"/build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/sending-transactions","docId":"build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/sending-transactions"},{"type":"link","label":"Monitoring Venom transactions","href":"/build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/monitoring-transactions","docId":"build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/monitoring-transactions"}],"href":"/build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/"},{"type":"category","label":"Using Evercloud GraphQL API to work with Venom","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"GraphQL API Quick Start","href":"/build/development-guides/using-evercloud-graphql-api-to-work-with-venom/graphql-quick-start","docId":"build/development-guides/using-evercloud-graphql-api-to-work-with-venom/graphql-quick-start"},{"type":"link","label":"GraphQL API guides","href":"/build/development-guides/using-evercloud-graphql-api-to-work-with-venom/graphql-api-guides","docId":"build/development-guides/using-evercloud-graphql-api-to-work-with-venom/graphql-api-guides"}],"href":"/build/development-guides/using-evercloud-graphql-api-to-work-with-venom/"}],"href":"/build/development-guides/"},{"type":"link","label":"Tools & Resources","href":"/build/tools-and-resources","docId":"build/tools-and-resources"}],"faqSidebar":[{"type":"link","label":"Venom Blockchain FAQs","href":"/faq/","docId":"faq/readme"},{"type":"link","label":"Integration","href":"/faq/integration","docId":"faq/integration"},{"type":"link","label":"Programming smart contracts","href":"/faq/programming","docId":"faq/programming"}],"standardSidebar":[{"type":"category","label":"Venom Enhance Proposals","collapsible":false,"collapsed":false,"items":[{"type":"link","label":"VEP-1: VEP Purpose and Guidelines","href":"/standards/VEP/vep-1","docId":"standards/VEP/vep-1"},{"type":"link","label":"VEP-1111: Contract indexation","href":"/standards/VEP/vep-1111","docId":"standards/VEP/vep-1111"},{"type":"link","label":"VEP-1155: Multi-Token","href":"/standards/VEP/vep-1155","docId":"standards/VEP/vep-1155"},{"type":"link","label":"VEP-2981: NFT Royalty","href":"/standards/VEP/vep-2981","docId":"standards/VEP/vep-2981"},{"type":"link","label":"VEP-33: Allowance Token Interface","href":"/standards/VEP/vep-33","docId":"standards/VEP/vep-33"}],"href":"/standards/VEP/"},{"type":"link","label":"LICENSE","href":"/standards/LICENSE","docId":"standards/LICENSE"},{"type":"category","label":"Borrowed TIPs","collapsible":false,"collapsed":false,"items":[{"type":"category","label":"Fungible Token","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Basic","href":"/standards/TIP/TIP-3/core-description","docId":"standards/TIP/TIP-3/core-description"},{"type":"link","label":"TIP-3.1","href":"/standards/TIP/TIP-3/1","docId":"standards/TIP/TIP-3/1"},{"type":"link","label":"TIP-3.2","href":"/standards/TIP/TIP-3/2","docId":"standards/TIP/TIP-3/2"}]},{"type":"category","label":"Non-Fungible Token","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Basic","href":"/standards/TIP/TIP-4/core-description","docId":"standards/TIP/TIP-4/core-description"},{"type":"link","label":"TIP-4.1","href":"/standards/TIP/TIP-4/1","docId":"standards/TIP/TIP-4/1"},{"type":"link","label":"TIP-4.2","href":"/standards/TIP/TIP-4/2","docId":"standards/TIP/TIP-4/2"},{"type":"link","label":"TIP-4.3","href":"/standards/TIP/TIP-4/3","docId":"standards/TIP/TIP-4/3"},{"type":"link","label":"TIP-4.4","href":"/standards/TIP/TIP-4/4","docId":"standards/TIP/TIP-4/4"},{"type":"link","label":"TIP-4.5","href":"/standards/TIP/TIP-4/5","docId":"standards/TIP/TIP-4/5"}]},{"type":"category","label":"Standard Interface Detection","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Basic","href":"/standards/TIP/TIP-6/core-description","docId":"standards/TIP/TIP-6/core-description"},{"type":"link","label":"TIP-6.1","href":"/standards/TIP/TIP-6/1","docId":"standards/TIP/TIP-6/1"}]}]}]},"docs":{"build/development-guides/comparing-of-ethereum-vs-venom-architectures":{"id":"build/development-guides/comparing-of-ethereum-vs-venom-architectures","title":"Comparing Ethereum vs. Venom architectures","description":"Most likely, you are familiar with EVM-based blockchains like Ethereum, and you need to migrate your experience from EVM-based blockchain to Venom. This article touches most important things about the difference between the two networks.","sidebar":"buildSidebar"},"build/development-guides/developing-of-simple-voting-system/venom-in-action/extend-our-voting-system-with-backend":{"id":"build/development-guides/developing-of-simple-voting-system/venom-in-action/extend-our-voting-system-with-backend","title":"Venom In Action. Extend our voting system with backend","description":"This section will show you how you can interact with contracts from a backend.","sidebar":"buildSidebar"},"build/development-guides/developing-of-simple-voting-system/venom-in-action/voting-system-contracts":{"id":"build/development-guides/developing-of-simple-voting-system/venom-in-action/voting-system-contracts","title":"Venom In Action. Voting system contracts","description":"This section will show you how to create your own SMV simple system. The real purpose of this guide - to explore some common mechanics like address calculation, external callings and bounce handling.","sidebar":"buildSidebar"},"build/development-guides/developing-of-simple-voting-system/venom-in-action/ways-of-code-enhancing":{"id":"build/development-guides/developing-of-simple-voting-system/venom-in-action/ways-of-code-enhancing","title":"Venom In Action. Ways of code enhancing","description":"Let\'s dive into some best practices and good tone coding. ","sidebar":"buildSidebar"},"build/development-guides/developing-of-simple-voting-system/voting-system-basics":{"id":"build/development-guides/developing-of-simple-voting-system/voting-system-basics","title":"Voting system basics","description":"Decentralized voting systems are a popular thing on lots of blockchain networks. They are even used to control the DAOs. There is no big deal to developing this system for EVM network. But we should have it in a distributed way. Look at the scheme:","sidebar":"buildSidebar"},"build/development-guides/how-to-create-your-own-fungible-tip-3-token/fungible-tokens-in-venom-network":{"id":"build/development-guides/how-to-create-your-own-fungible-tip-3-token/fungible-tokens-in-venom-network","title":"Fungible tokens in Venom network","description":"Fungible token&x20;","sidebar":"buildSidebar"},"build/development-guides/how-to-create-your-own-fungible-tip-3-token/quick-start-developing-with-tip-3":{"id":"build/development-guides/how-to-create-your-own-fungible-tip-3-token/quick-start-developing-with-tip-3","title":"Quick start developing with TIP-3","description":"This page helps you to instantly start developing with TIP-3 and deploy your own token here and now. Read next guides, if you want to go deeper.","sidebar":"buildSidebar"},"build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/extend-our-tokensale-with-frontend":{"id":"build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/extend-our-tokensale-with-frontend","title":"Venom In Action. Extend our Tokensale with frontend","description":"This section will show you how you can interact with your Tokensale contract via a web interface. You will create a dAPP, in fact.","sidebar":"buildSidebar"},"build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/going-global":{"id":"build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/going-global","title":"Venom In Action. Going Global","description":"This section shows you how to deploy your smart contracts to global networks (venom testnet or venom mainnet).","sidebar":"buildSidebar"},"build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/simple-tokensale":{"id":"build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/simple-tokensale","title":"Venom In Action. Simple Tokensale","description":"This guide shows you how you can perform on-chain interaction with previously deployed TIP-3 token","sidebar":"buildSidebar"},"build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/ways-of-code-enhancing":{"id":"build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/ways-of-code-enhancing","title":"Venom In Action. Ways of code enhancing","description":"During the following of this guide\'s code-listings you can meet keywords like pragma ever-solidity or keyword ever as a unit of the transfer value. It will be changed to venom soon. Follow the news and updates.","sidebar":"buildSidebar"},"build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/non-fungible-tokens-in-venom-network":{"id":"build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/non-fungible-tokens-in-venom-network","title":"Non-Fungible tokens in Venom network","description":"Non-fungible tokens aka NFT are unique cryptographic tokens that exist on a blockchain and cannot be replicated. Non-fungible is an economic term that you could use to describe things like your picture, a song file, or even your furniture. These things are not interchangeable with other items because they have unique properties.","sidebar":"buildSidebar"},"build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/quick-start-developing-with-tip-4":{"id":"build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/quick-start-developing-with-tip-4","title":"Quick start developing with TIP-4","description":"This page helps you to instantly start developing with TIP-4 and deploy your NFT collection here and now. Read the next guides, if you want to go deeper.","sidebar":"buildSidebar"},"build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/frontend-for-nft-auction":{"id":"build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/frontend-for-nft-auction","title":"Venom In Action. Frontend for NFT auction","description":"This section will demonstare ","sidebar":"buildSidebar"},"build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/frontend-for-nft-collection":{"id":"build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/frontend-for-nft-collection","title":"Venom In Action. Frontend for NFT collection","description":"This section will show you how to work with TIP-4.3 standard and why you need to support it.","sidebar":"buildSidebar"},"build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/simple-nft-auction":{"id":"build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/simple-nft-auction","title":"Venom In Action. Simple NFT auction","description":"This guide shows you how you can perform on-chain interaction with previously deployed TIP-4 token","sidebar":"buildSidebar"},"build/development-guides/readme":{"id":"build/development-guides/readme","title":"Development Guides","description":"Welcome to the Development Guides section. If you would like to learn development on the Venom blockchain you\'re in the right place.","sidebar":"buildSidebar"},"build/development-guides/setting-up-the-venom-smart-contract-development-environment":{"id":"build/development-guides/setting-up-the-venom-smart-contract-development-environment","title":"Setting Up The Venom Smart Contract Development Environment","description":"The first thing to do before starting the smart contracts development","sidebar":"buildSidebar"},"build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/monitoring-transactions":{"id":"build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/monitoring-transactions","title":"Monitoring Venom transactions","description":"Monitoring Venom transactions","sidebar":"buildSidebar"},"build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/readme":{"id":"build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/readme","title":"Using Ever SDK and developer tools to work with Venom","description":"This section contains guides on the various ways to accomplish the most important tasks of building on Venom Blockchain using Ever SDK and the Everdev CLI tool.","sidebar":"buildSidebar"},"build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/sending-transactions":{"id":"build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/sending-transactions","title":"Sending transactions in Venom","description":"Sending transactions in Venom","sidebar":"buildSidebar"},"build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/setting-up-wallet-account":{"id":"build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/setting-up-wallet-account","title":"Setting up Wallet Account","description":"Setting up Wallet Account","sidebar":"buildSidebar"},"build/development-guides/using-evercloud-graphql-api-to-work-with-venom/graphql-api-guides":{"id":"build/development-guides/using-evercloud-graphql-api-to-work-with-venom/graphql-api-guides","title":"GraphQL API guides","description":"GraphQL API guides","sidebar":"buildSidebar"},"build/development-guides/using-evercloud-graphql-api-to-work-with-venom/graphql-quick-start":{"id":"build/development-guides/using-evercloud-graphql-api-to-work-with-venom/graphql-quick-start","title":"GraphQL API Quick Start","description":"GraphQL API Quick Start","sidebar":"buildSidebar"},"build/development-guides/using-evercloud-graphql-api-to-work-with-venom/readme":{"id":"build/development-guides/using-evercloud-graphql-api-to-work-with-venom/readme","title":"Using Evercloud GraphQL API to work with Venom","description":"This section contains guides on the various ways to access the Venom blockchain using the capabilities of Evercloud GraphQL API.","sidebar":"buildSidebar"},"build/quick-start-on-testnet":{"id":"build/quick-start-on-testnet","title":"Quick start developing on Venom testnet","description":"If you need just dive deep into the development on Venom Blockchain, this article is suitable for you. You can use the following steps to get started.","sidebar":"buildSidebar"},"build/tools-and-resources":{"id":"build/tools-and-resources","title":"Tools & Resources","description":"","sidebar":"buildSidebar"},"faq/integration":{"id":"faq/integration","title":"Venom Blockchain FAQ: Integration with Venom Blockchain","description":"How to connect Venom Wallet to my dApp?","sidebar":"faqSidebar"},"faq/programming":{"id":"faq/programming","title":"Venom Blockchain FAQ: Programming smart contracts","description":"I know how to develop Ethereum smart contracts. What is the difference with Venom Blockchain?","sidebar":"faqSidebar"},"faq/readme":{"id":"faq/readme","title":"Venom Blockchain FAQs","description":"Venom Blockchain FAQs","sidebar":"faqSidebar"},"standards/LICENSE":{"id":"standards/LICENSE","title":"CC0 1.0 Universal","description":"Statement of Purpose","sidebar":"standardSidebar"},"standards/TIP/TIP-3/1":{"id":"standards/TIP/TIP-3/1","title":"Fungible Token Interface (TIP-3.1)","description":"Requires: TIP-6.1","sidebar":"standardSidebar"},"standards/TIP/TIP-3/2":{"id":"standards/TIP/TIP-3/2","title":"Internally-owned fungible Token Interface (TIP-3.2)","description":"Requires: TIP-3.1","sidebar":"standardSidebar"},"standards/TIP/TIP-3/core-description":{"id":"standards/TIP/TIP-3/core-description","title":"Fungible Token","description":"Abstract","sidebar":"standardSidebar"},"standards/TIP/TIP-4/1":{"id":"standards/TIP/TIP-4/1","title":"Non-Fungible Token (TIP-4.1)","description":"Requires: TIP-6.1","sidebar":"standardSidebar"},"standards/TIP/TIP-4/2":{"id":"standards/TIP/TIP-4/2","title":"Non-Fungible Token JSON Metadata (TIP-4.2)","description":"Requires: TIP-6.1","sidebar":"standardSidebar"},"standards/TIP/TIP-4/3":{"id":"standards/TIP/TIP-4/3","title":"Non-Fungible Token on-chain indexes (TIP-4.3)","description":"Requires: TIP-4.1","sidebar":"standardSidebar"},"standards/TIP/TIP-4/4":{"id":"standards/TIP/TIP-4/4","title":"Non-Fungible Token On-chain storage (TIP-4.4)","description":"Requires: TIP-4.1","sidebar":"standardSidebar"},"standards/TIP/TIP-4/5":{"id":"standards/TIP/TIP-4/5","title":"Non-Fungible Token Can\'t Be Evil Licensing (TIP-4.5)","description":"Requires: TIP-4.1","sidebar":"standardSidebar"},"standards/TIP/TIP-4/core-description":{"id":"standards/TIP/TIP-4/core-description","title":"Non-Fungible Token","description":"Abstract","sidebar":"standardSidebar"},"standards/TIP/TIP-6/1":{"id":"standards/TIP/TIP-6/1","title":"Standard Interface Detection Interface (TIP-6.1)","description":"Simple summary","sidebar":"standardSidebar"},"standards/TIP/TIP-6/core-description":{"id":"standards/TIP/TIP-6/core-description","title":"Standard Interface Detection","description":"The original TIP-6 standard was developed and maintained by the Everscale network community.","sidebar":"standardSidebar"},"standards/VEP/readme":{"id":"standards/VEP/readme","title":"Venom Enhance Proposals","description":"In order to improve its offerings and provide a better user experience, Venom blockchain has drawn on Everscale Improvement Proposals (TIPs) to build features such as fungible and non-fungible tokens and interface definition. However, we have also introduced our own VEPs, which are designed to address the specific needs and preferences of Venom users.","sidebar":"standardSidebar"},"standards/VEP/vep-1":{"id":"standards/VEP/vep-1","title":"VEP-1: VEP Purpose and Guidelines","description":"What is a VEP?","sidebar":"standardSidebar"},"standards/VEP/vep-1111":{"id":"standards/VEP/vep-1111","title":"VEP-1111: Contract indexation","description":"Abstract","sidebar":"standardSidebar"},"standards/VEP/vep-1155":{"id":"standards/VEP/vep-1155","title":"VEP-1155: Multi-Token","description":"Abstract","sidebar":"standardSidebar"},"standards/VEP/vep-2981":{"id":"standards/VEP/vep-2981","title":"VEP-2981: NFT Royalty","description":"Abstract","sidebar":"standardSidebar"},"standards/VEP/vep-33":{"id":"standards/VEP/vep-33","title":"VEP-33: Allowance Token Interface","description":"Abstract","sidebar":"standardSidebar"},"start/general/balance-transfers":{"id":"start/general/balance-transfers","title":"Balance Transfers","description":"A common application of blockchains is the transfer of funds from one account to another.","sidebar":"docsSidebar"},"start/general/community":{"id":"start/general/community","title":"Community","description":"The Venom blockchain is a community-driven network that empowers participants to shape the ecosystem\'s future. The network\'s success depends on the engagement and contributions of its users, validators, and developers. Members work together to advance the ecosystem by hosting events, contributing to network development, and ensuring the platform\'s security and governance.","sidebar":"docsSidebar"},"start/general/developer-programm":{"id":"start/general/developer-programm","title":"Venom Foundation Developer Program","description":"While exploring products and repositories related to the Venom Blockchain, you may come across a badge indicating that the project is a participant in the Venom Foundation Developer Program.","sidebar":"docsSidebar"},"start/general/ecosystem":{"id":"start/general/ecosystem","title":"Ecosystem","description":"Projects based on the Venom Blockchain","sidebar":"docsSidebar"},"start/general/presskit":{"id":"start/general/presskit","title":"Presskit","description":"You can use these files to publish informational materials related to the Venom Foundation.","sidebar":"docsSidebar"},"start/general/wallet/creating-new-wallet":{"id":"start/general/wallet/creating-new-wallet","title":"How to Create a New Account with Venom Wallet","description":"Generating the seed phrase","sidebar":"docsSidebar"},"start/general/wallet/how-to-create-a-backup-file":{"id":"start/general/wallet/how-to-create-a-backup-file","title":"How to Create a Backup File to Enable Restoring Seed Phrases from it?","description":"The most common method of storing seed phrases for non-custodial wallets is to record them on a piece of paper. However, some users may also be willing to use a more convenient method, storing the seed phrases where they can be quickly restored.","sidebar":"docsSidebar"},"start/general/wallet/how-to-sign-in-into-the-wallet":{"id":"start/general/wallet/how-to-sign-in-into-the-wallet","title":"How to Sign into the Wallet Account Using the Seed Phrase?","description":"Restoring your seed phrase","sidebar":"docsSidebar"},"start/general/wallet/manage-seeds-and-accounts":{"id":"start/general/wallet/manage-seeds-and-accounts","title":"Manage seeds and accounts.","description":"Gather all your existing wallets at a click.","sidebar":"docsSidebar"},"start/general/wallet/multisignature-account/creating-a-multisignature-account":{"id":"start/general/wallet/multisignature-account/creating-a-multisignature-account","title":"Creating a Multisignature Account and setting up the Custodians","description":"In situations where multiple approvals are required for a transaction to be made from a wallet, a feature called Multisignature (often shortened to \\"Multisig\\") can be implemented. This allows for multiple individuals to sign off on a transaction before it is executed, providing an added level of security and accountability.","sidebar":"docsSidebar"},"start/general/wallet/multisignature-account/creating-tracking-account":{"id":"start/general/wallet/multisignature-account/creating-tracking-account","title":"Creating Tracking Account","description":"To add a tracking account, ensure that the public key of the default account has been set as a custodian for the multisignature account for which a new tracking account is being created.","sidebar":"docsSidebar"},"start/general/wallet/multisignature-account/sending-tokens-from-the-multisignature-account":{"id":"start/general/wallet/multisignature-account/sending-tokens-from-the-multisignature-account","title":"Sending tokens from the Multisignature Account and Approving by Tracking Accounts","description":"To send tokens from a multisignature account, a majority of the custodians (e.g. 2 out of 3; or 2 out of 2) must sign off on the transaction.","sidebar":"docsSidebar"},"start/general/wallet/the-ledger/installing-everscale-on-ledger-live":{"id":"start/general/wallet/the-ledger/installing-everscale-on-ledger-live","title":"Installing Venom on Ledger Live","description":"Before you will be able to set up Venom Wallet on your Ledger device you have to install the Venom App on it.","sidebar":"docsSidebar"},"start/general/wallet/the-ledger/the-ledger":{"id":"start/general/wallet/the-ledger/the-ledger","title":"The Ledger","description":"Setting up Venom Wallet accounts with a Ledger device.","sidebar":"docsSidebar"},"start/general/wallet/the-main/send":{"id":"start/general/wallet/the-main/send","title":"Send","description":"Performing a transaction","sidebar":"docsSidebar"},"start/general/wallet/the-main/the-main":{"id":"start/general/wallet/the-main/the-main","title":"The Main Screen of the Wallet Extension","description":"Upon logging in, the user will be directed to the account management screen, where they will find all the necessary tools for managing their account.","sidebar":"docsSidebar"},"start/general/wallet/the-main/transactions":{"id":"start/general/wallet/the-main/transactions","title":"Transactions","description":"Revising history and details","sidebar":"docsSidebar"},"start/general/welcome-to-venom":{"id":"start/general/welcome-to-venom","title":"Getting Started","description":"The Knowledge Base is the entry point into the Venom universe. Get to know the technology behind the incredible scalability of the Venom blockchain.","sidebar":"docsSidebar"},"start/general/whats-new":{"id":"start/general/whats-new","title":"What\'s New","description":"All important updates to the documentation you can find here","sidebar":"docsSidebar"},"start/learn/accounts":{"id":"start/learn/accounts","title":"Accounts","description":"This article describes the wallet accounts and how they interact on-chain.","sidebar":"docsSidebar"},"start/learn/architecture":{"id":"start/learn/architecture","title":"Architecture","description":"The Venom blockchain is a heterogeneous multi-blockchain system with dynamic sharding capabilities.","sidebar":"docsSidebar"},"start/learn/consensus":{"id":"start/learn/consensus","title":"Consensus","description":"The primary goal of the consensus protocol is to provide a mechanism for all the parties involved in the network to reach an agreement on the current state of the blockchain and to ensure that all the transactions included in a block are valid and that the blockchain state is updated consistently and securely on all levels (shardchains, workchains, and masterchain).","sidebar":"docsSidebar"},"start/learn/gas-and-fees":{"id":"start/learn/gas-and-fees","title":"Gas and Fees","description":"When sending a message to the network, a specific amount of Venom tokens must be attached. This is used to compensate validators for their work, cover the costs of storing the message on the network, and any remaining balance is returned as change.","sidebar":"docsSidebar"},"start/learn/glossary":{"id":"start/learn/glossary","title":"Glossary","description":"Account","sidebar":"docsSidebar"},"start/learn/messages-and-transactions":{"id":"start/learn/messages-and-transactions","title":"Messages and Transactions","description":"All interactions with the Venom network are carried out through messages.","sidebar":"docsSidebar"},"start/learn/threaded-virtual-machine":{"id":"start/learn/threaded-virtual-machine","title":"Threaded Virtual Machine","description":"The Venom blockchain provides a way for smart contracts to be executed on TVM (Threaded Virtual Machine), a Turing complete machine on the basis of its ability to execution of machine-level instructions.","sidebar":"docsSidebar"},"start/learn/tokens-and-assets":{"id":"start/learn/tokens-and-assets","title":"Tokens and Assets","description":"VENOM","sidebar":"docsSidebar"},"start/maintain/how-to-become-a-validator":{"id":"start/maintain/how-to-become-a-validator","title":"How to run a Venom validator node","description":"Precautions","sidebar":"docsSidebar"},"start/maintain/network-maintainers":{"id":"start/maintain/network-maintainers","title":"Network Maintainers","description":"Welcome to the Venom Maintainers section. Maintainers are very important","sidebar":"docsSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.be99a0ca.js b/assets/js/935f2afb.be99a0ca.js new file mode 100644 index 000000000..0f5d53842 --- /dev/null +++ b/assets/js/935f2afb.be99a0ca.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkve_ps=self.webpackChunkve_ps||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docsSidebar":[{"type":"category","label":"General","collapsible":false,"collapsed":false,"items":[{"type":"link","label":"Getting Started","href":"/general/readme","docId":"start/general/welcome-to-venom"},{"type":"link","label":"What\'s New","href":"/general/whats-new","docId":"start/general/whats-new"},{"type":"link","label":"Ecosystem","href":"/general/ecosystem","docId":"start/general/ecosystem"},{"type":"category","label":"Wallet","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Create a New Account with Venom Wallet","href":"/general/wallet/create-a-new-wallet-account","docId":"start/general/wallet/creating-new-wallet"},{"type":"link","label":"How to Sign in into the Wallet","href":"/general/wallet/how-to-sign-in-into-the-wallet","docId":"start/general/wallet/how-to-sign-in-into-the-wallet"},{"type":"category","label":"The Main Screen","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Send","href":"/general/wallet/send","docId":"start/general/wallet/the-main/send"},{"type":"link","label":"Transactions","href":"/general/wallet/transactions","docId":"start/general/wallet/the-main/transactions"}],"href":"/general/wallet/the-main-screen"},{"type":"category","label":"The Multisignature Account","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Creating a Multisignature Account","href":"/general/wallet/creating-a-multisignature-account","docId":"start/general/wallet/multisignature-account/creating-a-multisignature-account"},{"type":"link","label":"Creating Tracking Account","href":"/general/wallet/creating-tracking-account","docId":"start/general/wallet/multisignature-account/creating-tracking-account"},{"type":"link","label":"Sending tokens from the Multisignature Account","href":"/general/wallet/sending-tokens-from-the-multisignature-account","docId":"start/general/wallet/multisignature-account/sending-tokens-from-the-multisignature-account"}]},{"type":"link","label":"Manage seeds and accounts","href":"/general/wallet/manage-seeds-and-accounts","docId":"start/general/wallet/manage-seeds-and-accounts"},{"type":"category","label":"The Ledger","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Installing Venom on Ledger Live","href":"/general/wallet/installing-ledger-app","docId":"start/general/wallet/the-ledger/installing-everscale-on-ledger-live"}],"href":"/general/wallet/the-ledger"},{"type":"link","label":"How to Create a Backup File","href":"/general/wallet/hot-to-create-a-backup-file","docId":"start/general/wallet/how-to-create-a-backup-file"}]},{"type":"link","label":"Balance Transfers","href":"/general/balance-transfers","docId":"start/general/balance-transfers"},{"type":"link","label":"Community","href":"/general/community","docId":"start/general/community"},{"type":"link","label":"Presskit","href":"/general/presskit","docId":"start/general/presskit"},{"type":"link","label":"Developer Program","href":"/general/developer-programm","docId":"start/general/developer-programm"}]},{"type":"category","label":"Learn","collapsible":false,"collapsed":false,"items":[{"type":"link","label":"Glossary","href":"/learn/glossary","docId":"start/learn/glossary"},{"type":"link","label":"Tokens and Assets","href":"/learn/tokens-and-assets","docId":"start/learn/tokens-and-assets"},{"type":"link","label":"Architecture","href":"/learn/architecture","docId":"start/learn/architecture"},{"type":"link","label":"Consensus","href":"/learn/consensus","docId":"start/learn/consensus"},{"type":"link","label":"Threaded Virtual Machine","href":"/learn/tvm","docId":"start/learn/threaded-virtual-machine"},{"type":"link","label":"Accounts","href":"/learn/accounts","docId":"start/learn/accounts"},{"type":"link","label":"Messages and Transactions","href":"/learn/messages-and-transactions","docId":"start/learn/messages-and-transactions"},{"type":"link","label":"Gas and fees","href":"/learn/transaction-fees","docId":"start/learn/gas-and-fees"}]},{"type":"category","label":"Maintain","collapsible":false,"collapsed":false,"items":[{"type":"link","label":"Network Maintainers","href":"/maintain/network-maintainers","docId":"start/maintain/network-maintainers"},{"type":"link","label":"How to run a Venom validator node","href":"/start/maintain/how-to-become-a-validator","docId":"start/maintain/how-to-become-a-validator"}]}],"buildSidebar":[{"type":"link","label":"Quick start developing on Venom testnet","href":"/build/quick-start-on-testnet","docId":"build/quick-start-on-testnet"},{"type":"category","label":"Development Guides","collapsible":false,"collapsed":false,"items":[{"type":"link","label":"Comparing Ethereum vs. Venom architectures","href":"/build/development-guides/comparing-of-ethereum-vs-venom-architectures","docId":"build/development-guides/comparing-of-ethereum-vs-venom-architectures"},{"type":"link","label":"Setting Up The Venom Smart Contract Development Environment","href":"/build/development-guides/setting-up-the-venom-smart-contract-development-environment","docId":"build/development-guides/setting-up-the-venom-smart-contract-development-environment"},{"type":"category","label":"How to create your own fungible TIP-3 token","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Fungible tokens in Venom network","href":"/build/development-guides/how-to-create-your-own-fungible-tip-3-token/fungible-tokens-in-venom-network","docId":"build/development-guides/how-to-create-your-own-fungible-tip-3-token/fungible-tokens-in-venom-network"},{"type":"link","label":"Quick start developing with TIP-3","href":"/build/development-guides/how-to-create-your-own-fungible-tip-3-token/quick-start-developing-with-tip-3","docId":"build/development-guides/how-to-create-your-own-fungible-tip-3-token/quick-start-developing-with-tip-3"},{"type":"category","label":"Venom In Action \ud83d\ude80","collapsible":false,"collapsed":false,"items":[{"type":"link","label":"Simple Tokensale","href":"/build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/simple-tokensale","docId":"build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/simple-tokensale"},{"type":"link","label":"Extend our Tokensale with frontend","href":"/build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/extend-our-tokensale-with-frontend","docId":"build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/extend-our-tokensale-with-frontend"},{"type":"link","label":"Going Global","href":"/build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/going-global","docId":"build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/going-global"},{"type":"link","label":"Ways of code enhancing","href":"/build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/ways-of-code-enhancing","docId":"build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/ways-of-code-enhancing"}]}]},{"type":"category","label":"Developing of simple voting system","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Voting system basics","href":"/build/development-guides/developing-of-simple-voting-system/voting-system-basics","docId":"build/development-guides/developing-of-simple-voting-system/voting-system-basics"},{"type":"category","label":"Venom In Action \ud83d\ude80","collapsible":false,"collapsed":false,"items":[{"type":"link","label":"Voting system contracts","href":"/build/development-guides/developing-of-simple-voting-system/venom-in-action/voting-system-contracts","docId":"build/development-guides/developing-of-simple-voting-system/venom-in-action/voting-system-contracts"},{"type":"link","label":"Ways of code enhancing","href":"/build/development-guides/developing-of-simple-voting-system/venom-in-action/ways-of-code-enhancing","docId":"build/development-guides/developing-of-simple-voting-system/venom-in-action/ways-of-code-enhancing"},{"type":"link","label":"Extend our voting system with backend","href":"/build/development-guides/developing-of-simple-voting-system/venom-in-action/extend-our-voting-system-with-backend","docId":"build/development-guides/developing-of-simple-voting-system/venom-in-action/extend-our-voting-system-with-backend"}]}]},{"type":"category","label":"How to create your own non-fungible TIP-4 token","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Non-Fungible tokens in Venom network","href":"/build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/non-fungible-tokens-in-venom-network","docId":"build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/non-fungible-tokens-in-venom-network"},{"type":"link","label":"Quick start developing with TIP-4","href":"/build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/quick-start-developing-with-tip-4","docId":"build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/quick-start-developing-with-tip-4"},{"type":"category","label":"Venom In Action \ud83d\ude80","collapsible":false,"collapsed":false,"items":[{"type":"link","label":"Simple NFT auction","href":"/build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/simple-nft-auction","docId":"build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/simple-nft-auction"},{"type":"link","label":"Frontend for NFT collection","href":"/build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/frontend-for-nft-collection","docId":"build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/frontend-for-nft-collection"},{"type":"link","label":"Frontend for NFT auction","href":"/build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/frontend-for-nft-auction","docId":"build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/frontend-for-nft-auction"}]}]},{"type":"category","label":"Using Ever SDK and developer tools to work with Venom","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Setting up Wallet Account","href":"/build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/setting-up-wallet-account","docId":"build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/setting-up-wallet-account"},{"type":"link","label":"Sending transactions in Venom","href":"/build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/sending-transactions","docId":"build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/sending-transactions"},{"type":"link","label":"Monitoring Venom transactions","href":"/build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/monitoring-transactions","docId":"build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/monitoring-transactions"}],"href":"/build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/"},{"type":"category","label":"Using Evercloud GraphQL API to work with Venom","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"GraphQL API Quick Start","href":"/build/development-guides/using-evercloud-graphql-api-to-work-with-venom/graphql-quick-start","docId":"build/development-guides/using-evercloud-graphql-api-to-work-with-venom/graphql-quick-start"},{"type":"link","label":"GraphQL API guides","href":"/build/development-guides/using-evercloud-graphql-api-to-work-with-venom/graphql-api-guides","docId":"build/development-guides/using-evercloud-graphql-api-to-work-with-venom/graphql-api-guides"}],"href":"/build/development-guides/using-evercloud-graphql-api-to-work-with-venom/"}],"href":"/build/development-guides/"},{"type":"link","label":"Tools & Resources","href":"/build/tools-and-resources","docId":"build/tools-and-resources"}],"faqSidebar":[{"type":"link","label":"Venom Blockchain FAQs","href":"/faq/","docId":"faq/readme"},{"type":"link","label":"Integration","href":"/faq/integration","docId":"faq/integration"},{"type":"link","label":"Programming smart contracts","href":"/faq/programming","docId":"faq/programming"}],"standardSidebar":[{"type":"category","label":"Venom Enhance Proposals","collapsible":false,"collapsed":false,"items":[{"type":"link","label":"VEP-1: VEP Purpose and Guidelines","href":"/standards/VEP/vep-1","docId":"standards/VEP/vep-1"},{"type":"link","label":"VEP-1111: Contract indexation","href":"/standards/VEP/vep-1111","docId":"standards/VEP/vep-1111"},{"type":"link","label":"VEP-1155: Multi-Token","href":"/standards/VEP/vep-1155","docId":"standards/VEP/vep-1155"},{"type":"link","label":"VEP-2981: NFT Royalty","href":"/standards/VEP/vep-2981","docId":"standards/VEP/vep-2981"},{"type":"link","label":"VEP-33: Allowance Token Interface","href":"/standards/VEP/vep-33","docId":"standards/VEP/vep-33"}],"href":"/standards/VEP/"},{"type":"link","label":"LICENSE","href":"/standards/LICENSE","docId":"standards/LICENSE"},{"type":"category","label":"Borrowed TIPs","collapsible":false,"collapsed":false,"items":[{"type":"category","label":"Fungible Token","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Basic","href":"/standards/TIP/TIP-3/core-description","docId":"standards/TIP/TIP-3/core-description"},{"type":"link","label":"TIP-3.1","href":"/standards/TIP/TIP-3/1","docId":"standards/TIP/TIP-3/1"},{"type":"link","label":"TIP-3.2","href":"/standards/TIP/TIP-3/2","docId":"standards/TIP/TIP-3/2"}]},{"type":"category","label":"Non-Fungible Token","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Basic","href":"/standards/TIP/TIP-4/core-description","docId":"standards/TIP/TIP-4/core-description"},{"type":"link","label":"TIP-4.1","href":"/standards/TIP/TIP-4/1","docId":"standards/TIP/TIP-4/1"},{"type":"link","label":"TIP-4.2","href":"/standards/TIP/TIP-4/2","docId":"standards/TIP/TIP-4/2"},{"type":"link","label":"4.2.2 New JSON Metadata","href":"/standards/TIP/TIP-4/TIP-4.2.2","docId":"standards/TIP/TIP-4/2_2"},{"type":"link","label":"TIP-4.3","href":"/standards/TIP/TIP-4/3","docId":"standards/TIP/TIP-4/3"},{"type":"link","label":"TIP-4.4","href":"/standards/TIP/TIP-4/4","docId":"standards/TIP/TIP-4/4"},{"type":"link","label":"TIP-4.5","href":"/standards/TIP/TIP-4/5","docId":"standards/TIP/TIP-4/5"}]},{"type":"category","label":"Standard Interface Detection","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Basic","href":"/standards/TIP/TIP-6/core-description","docId":"standards/TIP/TIP-6/core-description"},{"type":"link","label":"TIP-6.1","href":"/standards/TIP/TIP-6/1","docId":"standards/TIP/TIP-6/1"}]}]}]},"docs":{"build/development-guides/comparing-of-ethereum-vs-venom-architectures":{"id":"build/development-guides/comparing-of-ethereum-vs-venom-architectures","title":"Comparing Ethereum vs. Venom architectures","description":"Most likely, you are familiar with EVM-based blockchains like Ethereum, and you need to migrate your experience from EVM-based blockchain to Venom. This article touches most important things about the difference between the two networks.","sidebar":"buildSidebar"},"build/development-guides/developing-of-simple-voting-system/venom-in-action/extend-our-voting-system-with-backend":{"id":"build/development-guides/developing-of-simple-voting-system/venom-in-action/extend-our-voting-system-with-backend","title":"Venom In Action. Extend our voting system with backend","description":"This section will show you how you can interact with contracts from a backend.","sidebar":"buildSidebar"},"build/development-guides/developing-of-simple-voting-system/venom-in-action/voting-system-contracts":{"id":"build/development-guides/developing-of-simple-voting-system/venom-in-action/voting-system-contracts","title":"Venom In Action. Voting system contracts","description":"This section will show you how to create your own SMV simple system. The real purpose of this guide - to explore some common mechanics like address calculation, external callings and bounce handling.","sidebar":"buildSidebar"},"build/development-guides/developing-of-simple-voting-system/venom-in-action/ways-of-code-enhancing":{"id":"build/development-guides/developing-of-simple-voting-system/venom-in-action/ways-of-code-enhancing","title":"Venom In Action. Ways of code enhancing","description":"Let\'s dive into some best practices and good tone coding. ","sidebar":"buildSidebar"},"build/development-guides/developing-of-simple-voting-system/voting-system-basics":{"id":"build/development-guides/developing-of-simple-voting-system/voting-system-basics","title":"Voting system basics","description":"Decentralized voting systems are a popular thing on lots of blockchain networks. They are even used to control the DAOs. There is no big deal to developing this system for EVM network. But we should have it in a distributed way. Look at the scheme:","sidebar":"buildSidebar"},"build/development-guides/how-to-create-your-own-fungible-tip-3-token/fungible-tokens-in-venom-network":{"id":"build/development-guides/how-to-create-your-own-fungible-tip-3-token/fungible-tokens-in-venom-network","title":"Fungible tokens in Venom network","description":"Fungible token&x20;","sidebar":"buildSidebar"},"build/development-guides/how-to-create-your-own-fungible-tip-3-token/quick-start-developing-with-tip-3":{"id":"build/development-guides/how-to-create-your-own-fungible-tip-3-token/quick-start-developing-with-tip-3","title":"Quick start developing with TIP-3","description":"This page helps you to instantly start developing with TIP-3 and deploy your own token here and now. Read next guides, if you want to go deeper.","sidebar":"buildSidebar"},"build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/extend-our-tokensale-with-frontend":{"id":"build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/extend-our-tokensale-with-frontend","title":"Venom In Action. Extend our Tokensale with frontend","description":"This section will show you how you can interact with your Tokensale contract via a web interface. You will create a dAPP, in fact.","sidebar":"buildSidebar"},"build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/going-global":{"id":"build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/going-global","title":"Venom In Action. Going Global","description":"This section shows you how to deploy your smart contracts to global networks (venom testnet or venom mainnet).","sidebar":"buildSidebar"},"build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/simple-tokensale":{"id":"build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/simple-tokensale","title":"Venom In Action. Simple Tokensale","description":"This guide shows you how you can perform on-chain interaction with previously deployed TIP-3 token","sidebar":"buildSidebar"},"build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/ways-of-code-enhancing":{"id":"build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/ways-of-code-enhancing","title":"Venom In Action. Ways of code enhancing","description":"During the following of this guide\'s code-listings you can meet keywords like pragma ever-solidity or keyword ever as a unit of the transfer value. It will be changed to venom soon. Follow the news and updates.","sidebar":"buildSidebar"},"build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/non-fungible-tokens-in-venom-network":{"id":"build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/non-fungible-tokens-in-venom-network","title":"Non-Fungible tokens in Venom network","description":"Non-fungible tokens aka NFT are unique cryptographic tokens that exist on a blockchain and cannot be replicated. Non-fungible is an economic term that you could use to describe things like your picture, a song file, or even your furniture. These things are not interchangeable with other items because they have unique properties.","sidebar":"buildSidebar"},"build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/quick-start-developing-with-tip-4":{"id":"build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/quick-start-developing-with-tip-4","title":"Quick start developing with TIP-4","description":"This page helps you to instantly start developing with TIP-4 and deploy your NFT collection here and now. Read the next guides, if you want to go deeper.","sidebar":"buildSidebar"},"build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/frontend-for-nft-auction":{"id":"build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/frontend-for-nft-auction","title":"Venom In Action. Frontend for NFT auction","description":"This section will demonstare ","sidebar":"buildSidebar"},"build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/frontend-for-nft-collection":{"id":"build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/frontend-for-nft-collection","title":"Venom In Action. Frontend for NFT collection","description":"This section will show you how to work with TIP-4.3 standard and why you need to support it.","sidebar":"buildSidebar"},"build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/simple-nft-auction":{"id":"build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/simple-nft-auction","title":"Venom In Action. Simple NFT auction","description":"This guide shows you how you can perform on-chain interaction with previously deployed TIP-4 token","sidebar":"buildSidebar"},"build/development-guides/readme":{"id":"build/development-guides/readme","title":"Development Guides","description":"Welcome to the Development Guides section. If you would like to learn development on the Venom blockchain you\'re in the right place.","sidebar":"buildSidebar"},"build/development-guides/setting-up-the-venom-smart-contract-development-environment":{"id":"build/development-guides/setting-up-the-venom-smart-contract-development-environment","title":"Setting Up The Venom Smart Contract Development Environment","description":"The first thing to do before starting the smart contracts development","sidebar":"buildSidebar"},"build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/monitoring-transactions":{"id":"build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/monitoring-transactions","title":"Monitoring Venom transactions","description":"Monitoring Venom transactions","sidebar":"buildSidebar"},"build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/readme":{"id":"build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/readme","title":"Using Ever SDK and developer tools to work with Venom","description":"This section contains guides on the various ways to accomplish the most important tasks of building on Venom Blockchain using Ever SDK and the Everdev CLI tool.","sidebar":"buildSidebar"},"build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/sending-transactions":{"id":"build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/sending-transactions","title":"Sending transactions in Venom","description":"Sending transactions in Venom","sidebar":"buildSidebar"},"build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/setting-up-wallet-account":{"id":"build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/setting-up-wallet-account","title":"Setting up Wallet Account","description":"Setting up Wallet Account","sidebar":"buildSidebar"},"build/development-guides/using-evercloud-graphql-api-to-work-with-venom/graphql-api-guides":{"id":"build/development-guides/using-evercloud-graphql-api-to-work-with-venom/graphql-api-guides","title":"GraphQL API guides","description":"GraphQL API guides","sidebar":"buildSidebar"},"build/development-guides/using-evercloud-graphql-api-to-work-with-venom/graphql-quick-start":{"id":"build/development-guides/using-evercloud-graphql-api-to-work-with-venom/graphql-quick-start","title":"GraphQL API Quick Start","description":"GraphQL API Quick Start","sidebar":"buildSidebar"},"build/development-guides/using-evercloud-graphql-api-to-work-with-venom/readme":{"id":"build/development-guides/using-evercloud-graphql-api-to-work-with-venom/readme","title":"Using Evercloud GraphQL API to work with Venom","description":"This section contains guides on the various ways to access the Venom blockchain using the capabilities of Evercloud GraphQL API.","sidebar":"buildSidebar"},"build/quick-start-on-testnet":{"id":"build/quick-start-on-testnet","title":"Quick start developing on Venom testnet","description":"If you need just dive deep into the development on Venom Blockchain, this article is suitable for you. You can use the following steps to get started.","sidebar":"buildSidebar"},"build/tools-and-resources":{"id":"build/tools-and-resources","title":"Tools & Resources","description":"","sidebar":"buildSidebar"},"faq/integration":{"id":"faq/integration","title":"Venom Blockchain FAQ: Integration with Venom Blockchain","description":"How to connect Venom Wallet to my dApp?","sidebar":"faqSidebar"},"faq/programming":{"id":"faq/programming","title":"Venom Blockchain FAQ: Programming smart contracts","description":"I know how to develop Ethereum smart contracts. What is the difference with Venom Blockchain?","sidebar":"faqSidebar"},"faq/readme":{"id":"faq/readme","title":"Venom Blockchain FAQs","description":"Venom Blockchain FAQs","sidebar":"faqSidebar"},"standards/LICENSE":{"id":"standards/LICENSE","title":"CC0 1.0 Universal","description":"Statement of Purpose","sidebar":"standardSidebar"},"standards/TIP/TIP-3/1":{"id":"standards/TIP/TIP-3/1","title":"Fungible Token Interface (TIP-3.1)","description":"Requires: TIP-6.1","sidebar":"standardSidebar"},"standards/TIP/TIP-3/2":{"id":"standards/TIP/TIP-3/2","title":"Internally-owned fungible Token Interface (TIP-3.2)","description":"Requires: TIP-3.1","sidebar":"standardSidebar"},"standards/TIP/TIP-3/core-description":{"id":"standards/TIP/TIP-3/core-description","title":"Fungible Token","description":"Abstract","sidebar":"standardSidebar"},"standards/TIP/TIP-4/1":{"id":"standards/TIP/TIP-4/1","title":"Non-Fungible Token (TIP-4.1)","description":"Requires: TIP-6.1","sidebar":"standardSidebar"},"standards/TIP/TIP-4/2":{"id":"standards/TIP/TIP-4/2","title":"Non-Fungible Token JSON Metadata (TIP-4.2)","description":"Requires: TIP-6.1","sidebar":"standardSidebar"},"standards/TIP/TIP-4/2_2":{"id":"standards/TIP/TIP-4/2_2","title":"4.2.2 New JSON Metadata","description":"Abstract","sidebar":"standardSidebar"},"standards/TIP/TIP-4/3":{"id":"standards/TIP/TIP-4/3","title":"Non-Fungible Token on-chain indexes (TIP-4.3)","description":"Requires: TIP-4.1","sidebar":"standardSidebar"},"standards/TIP/TIP-4/4":{"id":"standards/TIP/TIP-4/4","title":"Non-Fungible Token On-chain storage (TIP-4.4)","description":"Requires: TIP-4.1","sidebar":"standardSidebar"},"standards/TIP/TIP-4/5":{"id":"standards/TIP/TIP-4/5","title":"Non-Fungible Token Can\'t Be Evil Licensing (TIP-4.5)","description":"Requires: TIP-4.1","sidebar":"standardSidebar"},"standards/TIP/TIP-4/core-description":{"id":"standards/TIP/TIP-4/core-description","title":"Non-Fungible Token","description":"Abstract","sidebar":"standardSidebar"},"standards/TIP/TIP-6/1":{"id":"standards/TIP/TIP-6/1","title":"Standard Interface Detection Interface (TIP-6.1)","description":"Simple summary","sidebar":"standardSidebar"},"standards/TIP/TIP-6/core-description":{"id":"standards/TIP/TIP-6/core-description","title":"Standard Interface Detection","description":"The original TIP-6 standard was developed and maintained by the Everscale network community.","sidebar":"standardSidebar"},"standards/VEP/readme":{"id":"standards/VEP/readme","title":"Venom Enhance Proposals","description":"In order to improve its offerings and provide a better user experience, Venom blockchain has drawn on Everscale Improvement Proposals (TIPs) to build features such as fungible and non-fungible tokens and interface definition. However, we have also introduced our own VEPs, which are designed to address the specific needs and preferences of Venom users.","sidebar":"standardSidebar"},"standards/VEP/vep-1":{"id":"standards/VEP/vep-1","title":"VEP-1: VEP Purpose and Guidelines","description":"What is a VEP?","sidebar":"standardSidebar"},"standards/VEP/vep-1111":{"id":"standards/VEP/vep-1111","title":"VEP-1111: Contract indexation","description":"Abstract","sidebar":"standardSidebar"},"standards/VEP/vep-1155":{"id":"standards/VEP/vep-1155","title":"VEP-1155: Multi-Token","description":"Abstract","sidebar":"standardSidebar"},"standards/VEP/vep-2981":{"id":"standards/VEP/vep-2981","title":"VEP-2981: NFT Royalty","description":"Abstract","sidebar":"standardSidebar"},"standards/VEP/vep-33":{"id":"standards/VEP/vep-33","title":"VEP-33: Allowance Token Interface","description":"Abstract","sidebar":"standardSidebar"},"start/general/balance-transfers":{"id":"start/general/balance-transfers","title":"Balance Transfers","description":"A common application of blockchains is the transfer of funds from one account to another.","sidebar":"docsSidebar"},"start/general/community":{"id":"start/general/community","title":"Community","description":"The Venom blockchain is a community-driven network that empowers participants to shape the ecosystem\'s future. The network\'s success depends on the engagement and contributions of its users, validators, and developers. Members work together to advance the ecosystem by hosting events, contributing to network development, and ensuring the platform\'s security and governance.","sidebar":"docsSidebar"},"start/general/developer-programm":{"id":"start/general/developer-programm","title":"Venom Foundation Developer Program","description":"While exploring products and repositories related to the Venom Blockchain, you may come across a badge indicating that the project is a participant in the Venom Foundation Developer Program.","sidebar":"docsSidebar"},"start/general/ecosystem":{"id":"start/general/ecosystem","title":"Ecosystem","description":"Projects based on the Venom Blockchain","sidebar":"docsSidebar"},"start/general/presskit":{"id":"start/general/presskit","title":"Presskit","description":"You can use these files to publish informational materials related to the Venom Foundation.","sidebar":"docsSidebar"},"start/general/wallet/creating-new-wallet":{"id":"start/general/wallet/creating-new-wallet","title":"How to Create a New Account with Venom Wallet","description":"Generating the seed phrase","sidebar":"docsSidebar"},"start/general/wallet/how-to-create-a-backup-file":{"id":"start/general/wallet/how-to-create-a-backup-file","title":"How to Create a Backup File to Enable Restoring Seed Phrases from it?","description":"The most common method of storing seed phrases for non-custodial wallets is to record them on a piece of paper. However, some users may also be willing to use a more convenient method, storing the seed phrases where they can be quickly restored.","sidebar":"docsSidebar"},"start/general/wallet/how-to-sign-in-into-the-wallet":{"id":"start/general/wallet/how-to-sign-in-into-the-wallet","title":"How to Sign into the Wallet Account Using the Seed Phrase?","description":"Restoring your seed phrase","sidebar":"docsSidebar"},"start/general/wallet/manage-seeds-and-accounts":{"id":"start/general/wallet/manage-seeds-and-accounts","title":"Manage seeds and accounts.","description":"Gather all your existing wallets at a click.","sidebar":"docsSidebar"},"start/general/wallet/multisignature-account/creating-a-multisignature-account":{"id":"start/general/wallet/multisignature-account/creating-a-multisignature-account","title":"Creating a Multisignature Account and setting up the Custodians","description":"In situations where multiple approvals are required for a transaction to be made from a wallet, a feature called Multisignature (often shortened to \\"Multisig\\") can be implemented. This allows for multiple individuals to sign off on a transaction before it is executed, providing an added level of security and accountability.","sidebar":"docsSidebar"},"start/general/wallet/multisignature-account/creating-tracking-account":{"id":"start/general/wallet/multisignature-account/creating-tracking-account","title":"Creating Tracking Account","description":"To add a tracking account, ensure that the public key of the default account has been set as a custodian for the multisignature account for which a new tracking account is being created.","sidebar":"docsSidebar"},"start/general/wallet/multisignature-account/sending-tokens-from-the-multisignature-account":{"id":"start/general/wallet/multisignature-account/sending-tokens-from-the-multisignature-account","title":"Sending tokens from the Multisignature Account and Approving by Tracking Accounts","description":"To send tokens from a multisignature account, a majority of the custodians (e.g. 2 out of 3; or 2 out of 2) must sign off on the transaction.","sidebar":"docsSidebar"},"start/general/wallet/the-ledger/installing-everscale-on-ledger-live":{"id":"start/general/wallet/the-ledger/installing-everscale-on-ledger-live","title":"Installing Venom on Ledger Live","description":"Before you will be able to set up Venom Wallet on your Ledger device you have to install the Venom App on it.","sidebar":"docsSidebar"},"start/general/wallet/the-ledger/the-ledger":{"id":"start/general/wallet/the-ledger/the-ledger","title":"The Ledger","description":"Setting up Venom Wallet accounts with a Ledger device.","sidebar":"docsSidebar"},"start/general/wallet/the-main/send":{"id":"start/general/wallet/the-main/send","title":"Send","description":"Performing a transaction","sidebar":"docsSidebar"},"start/general/wallet/the-main/the-main":{"id":"start/general/wallet/the-main/the-main","title":"The Main Screen of the Wallet Extension","description":"Upon logging in, the user will be directed to the account management screen, where they will find all the necessary tools for managing their account.","sidebar":"docsSidebar"},"start/general/wallet/the-main/transactions":{"id":"start/general/wallet/the-main/transactions","title":"Transactions","description":"Revising history and details","sidebar":"docsSidebar"},"start/general/welcome-to-venom":{"id":"start/general/welcome-to-venom","title":"Getting Started","description":"The Knowledge Base is the entry point into the Venom universe. Get to know the technology behind the incredible scalability of the Venom blockchain.","sidebar":"docsSidebar"},"start/general/whats-new":{"id":"start/general/whats-new","title":"What\'s New","description":"All important updates to the documentation you can find here","sidebar":"docsSidebar"},"start/learn/accounts":{"id":"start/learn/accounts","title":"Accounts","description":"This article describes the wallet accounts and how they interact on-chain.","sidebar":"docsSidebar"},"start/learn/architecture":{"id":"start/learn/architecture","title":"Architecture","description":"The Venom blockchain is a heterogeneous multi-blockchain system with dynamic sharding capabilities.","sidebar":"docsSidebar"},"start/learn/consensus":{"id":"start/learn/consensus","title":"Consensus","description":"The primary goal of the consensus protocol is to provide a mechanism for all the parties involved in the network to reach an agreement on the current state of the blockchain and to ensure that all the transactions included in a block are valid and that the blockchain state is updated consistently and securely on all levels (shardchains, workchains, and masterchain).","sidebar":"docsSidebar"},"start/learn/gas-and-fees":{"id":"start/learn/gas-and-fees","title":"Gas and Fees","description":"When sending a message to the network, a specific amount of Venom tokens must be attached. This is used to compensate validators for their work, cover the costs of storing the message on the network, and any remaining balance is returned as change.","sidebar":"docsSidebar"},"start/learn/glossary":{"id":"start/learn/glossary","title":"Glossary","description":"Account","sidebar":"docsSidebar"},"start/learn/messages-and-transactions":{"id":"start/learn/messages-and-transactions","title":"Messages and Transactions","description":"All interactions with the Venom network are carried out through messages.","sidebar":"docsSidebar"},"start/learn/threaded-virtual-machine":{"id":"start/learn/threaded-virtual-machine","title":"Threaded Virtual Machine","description":"The Venom blockchain provides a way for smart contracts to be executed on TVM (Threaded Virtual Machine), a Turing complete machine on the basis of its ability to execution of machine-level instructions.","sidebar":"docsSidebar"},"start/learn/tokens-and-assets":{"id":"start/learn/tokens-and-assets","title":"Tokens and Assets","description":"VENOM","sidebar":"docsSidebar"},"start/maintain/how-to-become-a-validator":{"id":"start/maintain/how-to-become-a-validator","title":"How to run a Venom validator node","description":"Precautions","sidebar":"docsSidebar"},"start/maintain/network-maintainers":{"id":"start/maintain/network-maintainers","title":"Network Maintainers","description":"Welcome to the Venom Maintainers section. Maintainers are very important","sidebar":"docsSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/b7729d33.f7a503b1.js b/assets/js/b7729d33.f7a503b1.js new file mode 100644 index 000000000..a14024081 --- /dev/null +++ b/assets/js/b7729d33.f7a503b1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkve_ps=self.webpackChunkve_ps||[]).push([[788],{4137:(t,e,a)=>{a.d(e,{Zo:()=>d,kt:()=>u});var n=a(7294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function l(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function i(t){for(var e=1;e=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var p=n.createContext({}),s=function(t){var e=n.useContext(p),a=e;return t&&(a="function"==typeof t?t(e):i(i({},e),t)),a},d=function(t){var e=s(t.components);return n.createElement(p.Provider,{value:e},t.children)},m={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},c=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,l=t.originalType,p=t.parentName,d=o(t,["components","mdxType","originalType","parentName"]),c=s(a),u=r,k=c["".concat(p,".").concat(u)]||c[u]||m[u]||l;return a?n.createElement(k,i(i({ref:e},d),{},{components:a})):n.createElement(k,i({ref:e},d))}));function u(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=a.length,i=new Array(l);i[0]=c;var o={};for(var p in e)hasOwnProperty.call(e,p)&&(o[p]=e[p]);o.originalType=t,o.mdxType="string"==typeof t?t:r,i[1]=o;for(var s=2;s{a.r(e),a.d(e,{assets:()=>p,contentTitle:()=>i,default:()=>m,frontMatter:()=>l,metadata:()=>o,toc:()=>s});var n=a(7462),r=(a(7294),a(4137));const l={title:"4.2.2 New JSON Metadata",sidebar_position:2,slug:"TIP-4.2.2"},i="Non-Fungible Token JSON Metadata (TIP-4.2.2)",o={unversionedId:"standards/TIP/TIP-4/2_2",id:"standards/TIP/TIP-4/2_2",title:"4.2.2 New JSON Metadata",description:"Abstract",source:"@site/docs/standards/TIP/TIP-4/2_2.md",sourceDirName:"standards/TIP/TIP-4",slug:"/standards/TIP/TIP-4/TIP-4.2.2",permalink:"/standards/TIP/TIP-4/TIP-4.2.2",draft:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"4.2.2 New JSON Metadata",sidebar_position:2,slug:"TIP-4.2.2"},sidebar:"standardSidebar",previous:{title:"TIP-4.2",permalink:"/standards/TIP/TIP-4/2"},next:{title:"TIP-4.3",permalink:"/standards/TIP/TIP-4/3"}},p={},s=[{value:"Abstract",id:"abstract",level:2},{value:"Motivation",id:"motivation",level:2},{value:"Specification",id:"specification",level:2},{value:"TIP4_2_2Collection",id:"tip4_2_2collection",level:2},{value:"TIP4_2_2Collection.getNftUrl()",id:"tip4_2_2collectiongetnfturl",level:3},{value:"TIP4_2_2Collection.getCollectionUrl()",id:"tip4_2_2collectiongetcollectionurl",level:3},{value:"TIP4_2_2NFT",id:"tip4_2_2nft",level:2},{value:"ITIP4_2_2NFT.getUrlParts()",id:"itip4_2_2nftgeturlparts",level:3},{value:"Metadata format",id:"metadata-format",level:3},{value:"Example",id:"example",level:3},{value:"How to add the new JSON metadata type?",id:"how-to-add-the-new-json-metadata-type",level:2},{value:"References",id:"references",level:2}],d={toc:s};function m(t){let{components:e,...a}=t;return(0,r.kt)("wrapper",(0,n.Z)({},d,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"non-fungible-token-json-metadata-tip-422"},"Non-Fungible Token JSON Metadata (TIP-4.2.2)"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"author: ELena Khramtsova , Aleksandr Khramtsov \ntype: Contract\ncreated: 2024-06-07\nRequires: TIP-6\n")),(0,r.kt)("h2",{id:"abstract"},"Abstract"),(0,r.kt)("p",null,"This is an alternative standard for storing metadata, but in a more familiar form for EVM users of such networks. It is not compatible with basic Tip4.2"),(0,r.kt)("p",null,"This standard proposes storing metadata outside the blockchain (centralized backing, ipfs, etc.)"),(0,r.kt)("h2",{id:"motivation"},"Motivation"),(0,r.kt)("p",null,"The implementation below solves several problems at once:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"For Mystery-type collections, it makes reveal cheap and makes it easier to execute"),(0,r.kt)("li",{parentName:"ul"},"Helps avoid storing json onchain. Storing and replacing json in a contract is expensive."),(0,r.kt)("li",{parentName:"ul"},"Makes it possible to change metadata without making a bunch of transactions to the blockchain"),(0,r.kt)("li",{parentName:"ul"},"Familiar metadata format for those who have already released collections on EVM"),(0,r.kt)("li",{parentName:"ul"},"In the future, this will make it easier to bridge/issue NFT on multiple blockchains")),(0,r.kt)("h2",{id:"specification"},"Specification"),(0,r.kt)("p",null,"The keywords \u201cMUST\u201d, \u201cMUST NOT\u201d, \u201cREQUIRED\u201d, \u201cSHALL\u201d, \u201cSHALL NOT\u201d, \u201cSHOULD\u201d, \u201cSHOULD NOT\u201d, \u201cRECOMMENDED\u201d, \u201cMAY\u201d, and \u201cOPTIONAL\u201d in this document are to be interpreted as described in ",(0,r.kt)("a",{parentName:"p",href:"https://datatracker.ietf.org/doc/html/rfc2119"},"RFC 2119")),(0,r.kt)("h2",{id:"tip4_2_2collection"},"TIP4_2_2Collection"),(0,r.kt)("p",null,"New features appear in the collection."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-solidity"},"pragma ever-solidity >= 0.62.0;\n\ninterface ITIP4_2_2Collection {\n\n /// The TIP-6.1 identifier for this interface is 0x244a5200\n\n /// @notice The event emits when set or change collection metadata\n event collectionMetadataUpdated();\n\n /// @notice The event emits when set or change NFTs metadata\n event nftMetadataUpdated();\n\n /// @notice build url to get metadata for NFT\n /// @return nftUrl - url to get metadata for NFT\n /// @param parts is TvmCell from NFT for build the link to metadata\n function getNftUrl(TvmCell parts) external responsible returns (string nftUrl);\n\n /// @notice build url to get metadata for NFT\n /// @return collectionUrl - url to get metadata for NFT\n function getCollectionUrl() external view responsible returns (string collectionUrl);\n\n}\n")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"NOTE")," The ",(0,r.kt)("a",{parentName:"p",href:"/standards/TIP/TIP-6/1"},"TIP-6.1")," identifier for this interface is ",(0,r.kt)("inlineCode",{parentName:"p"},"0x244a5200"),"."),(0,r.kt)("h3",{id:"tip4_2_2collectiongetnfturl"},"TIP4_2_2Collection.getNftUrl()"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-solidity"},"function getNftUrl(TvmCell parts) external responsible returns (string nftUrl);\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"parts")," (",(0,r.kt)("inlineCode",{parentName:"li"},"TvmCell"),") - is TvmCell from NFT for build the link to metadata")),(0,r.kt)("p",null,"The function, based on the main link and the part it received, builds the final link to the NFT metadata. In the case of collections, mystery box can describe more complex logic in which the display of the final link will depend on the flag the sale of the collection is completed or not."),(0,r.kt)("h3",{id:"tip4_2_2collectiongetcollectionurl"},"TIP4_2_2Collection.getCollectionUrl()"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-solidity"},"function getCollectionUrl() external view responsible returns (string collectionUrl);\n")),(0,r.kt)("p",null,"The function is analogous to the getJson function in the Type4.2 standard but returns not json but a link to the json metadata of the collection."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-solidity"},"event collectionMetadataUpdated();\nevent nftMetadataUpdated();\n")),(0,r.kt)("p",null,"You must emit them when you change the metadata of collection or NFT."),(0,r.kt)("h2",{id:"tip4_2_2nft"},"TIP4_2_2NFT"),(0,r.kt)("p",null,"Each NFT now stores only a part of the link by which the metadata for it can be uniquely identified, and the metadata can be obtained by attaching this part to the collection function ",(0,r.kt)("inlineCode",{parentName:"p"},"getNftUrl(TvmCell parts)"),"."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"NOTE")," The ",(0,r.kt)("a",{parentName:"p",href:"/standards/TIP/TIP-6/1"},"TIP-6.1")," identifier for this interface is ",(0,r.kt)("inlineCode",{parentName:"p"},"0x7239d7b1"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-solidity"},"pragma ever-solidity >= 0.62.0;\n\ninterface ITIP4_2_2NFT {\n\n\n /// The TIP-6.1 identifier for this interface is 0x7239d7b1.\n\n /// @notice event emits when update NFT part.\n event metadataUpdated();\n\n /// @notice NFT part to get metadata\n /// @return part - TvmCell allows to build URL with metadata for this NFT\n function getUrlParts() external view responsible returns (TvmCell part);\n\n}\n")),(0,r.kt)("h3",{id:"itip4_2_2nftgeturlparts"},"ITIP4_2_2NFT.getUrlParts()"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-solidity"},"function getUrlParts() external view responsible returns (TvmCell part);\n")),(0,r.kt)("p",null,"The function returns the part identifying the NFT in the form of a TvmCell, which gives greater variability. In the simplest version, this could be id."),(0,r.kt)("p",null,"You must emit event ",(0,r.kt)("inlineCode",{parentName:"p"},"metadataUpdated()")," when NFT part update."),(0,r.kt)("h3",{id:"metadata-format"},"Metadata format"),(0,r.kt)("p",null,'JSON metadata type: "Basic NFT"'),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Basic NFT")," use for links to files stores in web. JSON fields contain information about item, files and preview info."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Basic NFT")," describes fields that must be in JSON.\nThe ",(0,r.kt)("inlineCode",{parentName:"p"},"attributes")," field may not be present in the JSON metadata."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Field name"),(0,r.kt)("th",{parentName:"tr",align:null},"type"),(0,r.kt)("th",{parentName:"tr",align:null},"Value"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"type")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},'"Basic NFT"'),(0,r.kt)("td",{parentName:"tr",align:null},"Constant name for this type")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"name")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Name of the object")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"description")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Description of the object")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"preview")),(0,r.kt)("td",{parentName:"tr",align:null},"object"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Object preview")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"preview.source")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Link to object. Contains protocol and data source. Delimiter is ",(0,r.kt)("strong",{parentName:"td"},":"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"preview.mimetype")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types"},"Mime type")," of object")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"files")),(0,r.kt)("td",{parentName:"tr",align:null},"array"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Array of objects.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"file.source")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Link to object. Contains protocol and data source. Delimiter is ",(0,r.kt)("strong",{parentName:"td"},":"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"file.mimetype")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types"},"Mime type")," of object")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"attributes")),(0,r.kt)("td",{parentName:"tr",align:null},"array"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Array of objects.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"attributes.trait_type")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Type of attribute (Base, Eyes ...)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"attributes.value")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Value of attribute (Starfish, Blue ...)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"external_url")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"URL to website")))),(0,r.kt)("h3",{id:"example"},"Example"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-JSON"},'{\n "type": "Basic NFT",\n "name": "Sample Name",\n "description": "Hello world!",\n "preview": {\n "source": "https://everscale.network/images/Backgrounds/Main/main-hero.png",\n "mimetype": "image/png"\n },\n "files": [\n {\n "source": "https://everscale.network/images/Backgrounds/Main/main-hero.png",\n "mimetype": "image/png"\n }\n ],\n "attributes": [\n {\n "trait_type": "Base", \n "value": "Starfish"\n }, \n {\n "trait_type": "Eyes", \n "value": "blue"\n } ]\n "external_url": "https://everscale.network"\n}\n')),(0,r.kt)("p",null,"You can extend ",(0,r.kt)("inlineCode",{parentName:"p"},"Basic NFT")," type for your custom fields."),(0,r.kt)("h2",{id:"how-to-add-the-new-json-metadata-type"},"How to add the new JSON metadata type?"),(0,r.kt)("p",null,"For added new metadata type of ",(0,r.kt)("a",{parentName:"p",href:"/standards/TIP/TIP-4/TIP-4.2.2"},"TIP-4.2.2")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Create product that use new JSON type."),(0,r.kt)("li",{parentName:"ul"},"Send PR for change the docs."),(0,r.kt)("li",{parentName:"ul"},"Explain why it will be in Standard.")),(0,r.kt)("h2",{id:"references"},"References"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://eips.ethereum.org/EIPS/eip-721"},"Ethereum EIP-721")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.metaplex.com/token-metadata/specification"},"Solana v1.2.0")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/ton-blockchain/TIPs/issues/62"},"TON NFT"),", ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/ton-blockchain/TIPs/issues/64"},"TON DATA")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://gitlab.com/tezos/tzip/-/blob/master/proposals/tzip-12/tzip-12.md"},"Tezos TZIP12")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.binance.org/smart-chain/developer/nft-metadata-standard.html"},"BNS BEP721"))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e945c59a.043d0a11.js b/assets/js/e945c59a.043d0a11.js deleted file mode 100644 index c6ad75791..000000000 --- a/assets/js/e945c59a.043d0a11.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkve_ps=self.webpackChunkve_ps||[]).push([[561],{4137:(t,e,a)=>{a.d(e,{Zo:()=>m,kt:()=>u});var n=a(7294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function l(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function i(t){for(var e=1;e=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var p=n.createContext({}),d=function(t){var e=n.useContext(p),a=e;return t&&(a="function"==typeof t?t(e):i(i({},e),t)),a},m=function(t){var e=d(t.components);return n.createElement(p.Provider,{value:e},t.children)},s={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},k=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,l=t.originalType,p=t.parentName,m=o(t,["components","mdxType","originalType","parentName"]),k=d(a),u=r,g=k["".concat(p,".").concat(u)]||k[u]||s[u]||l;return a?n.createElement(g,i(i({ref:e},m),{},{components:a})):n.createElement(g,i({ref:e},m))}));function u(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=a.length,i=new Array(l);i[0]=k;var o={};for(var p in e)hasOwnProperty.call(e,p)&&(o[p]=e[p]);o.originalType=t,o.mdxType="string"==typeof t?t:r,i[1]=o;for(var d=2;d{a.r(e),a.d(e,{assets:()=>p,contentTitle:()=>i,default:()=>s,frontMatter:()=>l,metadata:()=>o,toc:()=>d});var n=a(7462),r=(a(7294),a(4137));const l={sidebar_position:2,sidebar_label:"TIP-4.2"},i="Non-Fungible Token JSON Metadata (TIP-4.2)",o={unversionedId:"standards/TIP/TIP-4/2",id:"standards/TIP/TIP-4/2",title:"Non-Fungible Token JSON Metadata (TIP-4.2)",description:"Requires: TIP-6.1",source:"@site/docs/standards/TIP/TIP-4/2.md",sourceDirName:"standards/TIP/TIP-4",slug:"/standards/TIP/TIP-4/2",permalink:"/standards/TIP/TIP-4/2",draft:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,sidebar_label:"TIP-4.2"},sidebar:"standardSidebar",previous:{title:"TIP-4.1",permalink:"/standards/TIP/TIP-4/1"},next:{title:"TIP-4.3",permalink:"/standards/TIP/TIP-4/3"}},p={},d=[{value:"Abstract",id:"abstract",level:2},{value:"Motivation",id:"motivation",level:2},{value:"Specification",id:"specification",level:2},{value:"JSON metadata",id:"json-metadata",level:2},{value:"TIP4_2JSON_Metadata.getJson()",id:"tip4_2json_metadatagetjson",level:3},{value:"Empty JSON metadata",id:"empty-json-metadata",level:2},{value:"JSON metadata type",id:"json-metadata-type",level:2},{value:"JSON metadata type: "Basic NFT"",id:"json-metadata-type-basic-nft",level:2},{value:"Example",id:"example",level:3},{value:"JSON metadata type: metaverse.region",id:"json-metadata-type-metaverseregion",level:2},{value:"Example",id:"example-1",level:3},{value:"Region metadata",id:"region-metadata",level:3},{value:"Region shape types",id:"region-shape-types",level:3},{value:"Cuboid",id:"cuboid",level:4},{value:"Cuboid object specification",id:"cuboid-object-specification",level:5},{value:"Example usage",id:"example-usage",level:5},{value:"Cylinder",id:"cylinder",level:4},{value:"Cylinder object specification",id:"cylinder-object-specification",level:5},{value:"Example usage",id:"example-usage-1",level:5},{value:"Sphere",id:"sphere",level:4},{value:"Spherical object specification",id:"spherical-object-specification",level:5},{value:"Example usage",id:"example-usage-2",level:5},{value:"2D polygon",id:"2d-polygon",level:4},{value:"2D polygon object specification",id:"2d-polygon-object-specification",level:5},{value:"Shared models",id:"shared-models",level:4},{value:"XYZ",id:"xyz",level:5},{value:"Standard conventions",id:"standard-conventions",level:4},{value:"How to add the new JSON metadata type?",id:"how-to-add-the-new-json-metadata-type",level:2},{value:"References",id:"references",level:2}],m={toc:d};function s(t){let{components:e,...a}=t;return(0,r.kt)("wrapper",(0,n.Z)({},m,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"non-fungible-token-json-metadata-tip-42"},"Non-Fungible Token JSON Metadata (TIP-4.2)"),(0,r.kt)("p",null,"Requires: ",(0,r.kt)("a",{parentName:"p",href:"/standards/TIP/TIP-6/1"},"TIP-6.1")),(0,r.kt)("h2",{id:"abstract"},"Abstract"),(0,r.kt)("p",null,"Token-specific metadata is stored as a string in smart contract. To facilitate an off-chain working with metadata, it is JSON object. The below metadata structure allows the marketplaces to read and display the details about the assets which your NFTs represent."),(0,r.kt)("p",null,"This standard provides optional JSON fields and contract interface."),(0,r.kt)("h2",{id:"motivation"},"Motivation"),(0,r.kt)("p",null,"A standard fields facilitate displaying of NFT data for: wallets, explorers, marketplaces, etc."),(0,r.kt)("h2",{id:"specification"},"Specification"),(0,r.kt)("p",null,"The keywords \u201cMUST\u201d, \u201cMUST NOT\u201d, \u201cREQUIRED\u201d, \u201cSHALL\u201d, \u201cSHALL NOT\u201d, \u201cSHOULD\u201d, \u201cSHOULD NOT\u201d, \u201cRECOMMENDED\u201d, \u201cMAY\u201d, and \u201cOPTIONAL\u201d in this document are to be interpreted as described in ",(0,r.kt)("a",{parentName:"p",href:"https://datatracker.ietf.org/doc/html/rfc2119"},"RFC 2119")),(0,r.kt)("h2",{id:"json-metadata"},"JSON metadata"),(0,r.kt)("p",null,"Return the metadata as JSON"),(0,r.kt)("p",null,"Every TIP4.2 compliant contract must implement the ",(0,r.kt)("inlineCode",{parentName:"p"},"TIP4_2JSON_Metadata")," interface and ",(0,r.kt)("a",{parentName:"p",href:"/standards/TIP/TIP-6/1"},"TIP-6.1")," interfaces"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-solidity"},"pragma ton-solidity >= 0.58.0;\n\ninterface TIP4_2JSON_Metadata {\n\n /// @notice metadata in JSON format\n /// @return json The JSON string with metadata\n function getJson() external view responsible returns (string json);\n\n}\n")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"NOTE")," The ",(0,r.kt)("a",{parentName:"p",href:"/standards/TIP/TIP-6/1"},"TIP-6.1")," identifier for this interface is ",(0,r.kt)("inlineCode",{parentName:"p"},"0x24D7D5F5"),"."),(0,r.kt)("h3",{id:"tip4_2json_metadatagetjson"},"TIP4_2JSON_Metadata.getJson()"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-solidity"},"function getJson() external view responsible returns (string json);\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"json")," (",(0,r.kt)("inlineCode",{parentName:"li"},"string"),") - The JSON string with metadata")),(0,r.kt)("p",null,"The function return metadata as a JSON string."),(0,r.kt)("h2",{id:"empty-json-metadata"},"Empty JSON metadata"),(0,r.kt)("p",null,"Empty JSON metadata is represented as a blank JSON object or an empty string."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json"},"{}\n")),(0,r.kt)("h2",{id:"json-metadata-type"},"JSON metadata type"),(0,r.kt)("p",null,'Not empty JSON must have "type" field'),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{"type":"string"}\n')),(0,r.kt)("p",null,'Application that read JSON metadata use "type" field for parsing standard or custom JSON fields.'),(0,r.kt)("h2",{id:"json-metadata-type-basic-nft"},'JSON metadata type: "Basic NFT"'),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Basic NFT")," use for links to files stores in web. JSON fields contain information about item, files and preview info."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Basic NFT")," describes fields that must be in JSON"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Field name"),(0,r.kt)("th",{parentName:"tr",align:null},"type"),(0,r.kt)("th",{parentName:"tr",align:null},"Value"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"type")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},'"Basic NFT"'),(0,r.kt)("td",{parentName:"tr",align:null},"Constant name for this type")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"name")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Name of the object")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"description")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Description of the object")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"preview")),(0,r.kt)("td",{parentName:"tr",align:null},"object"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Object preview")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"preview.source")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Link to object. Contains protocol and data source. Delimiter is ",(0,r.kt)("strong",{parentName:"td"},":"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"preview.mimetype")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types"},"Mime type")," of object")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"files")),(0,r.kt)("td",{parentName:"tr",align:null},"array"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Array of objects.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"file.source")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Link to object. Contains protocol and data source. Delimiter is ",(0,r.kt)("strong",{parentName:"td"},":"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"file.mimetype")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types"},"Mime type")," of object")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"external_url")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"URL to website")))),(0,r.kt)("h3",{id:"example"},"Example"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-JSON"},'{\n "type": "Basic NFT",\n "name": "Sample Name",\n "description": "Hello world!",\n "preview": {\n "source": "https://nft.venom/images/Backgrounds/Main/main-hero.png",\n "mimetype": "image/png"\n },\n "files": [\n {\n "source": "https://nft.venom/images/Backgrounds/Main/main-hero.png",\n "mimetype": "image/png"\n }\n ],\n "external_url": "https://nft.venom"\n}\n')),(0,r.kt)("p",null,"You can extend ",(0,r.kt)("inlineCode",{parentName:"p"},"Basic NFT")," type for your custom fields."),(0,r.kt)("h2",{id:"json-metadata-type-metaverseregion"},"JSON metadata type: ",(0,r.kt)("inlineCode",{parentName:"h2"},"metaverse.region")),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"metaverse.region")," JSON object stores the unique reference to a specific region (bundle of regions) inside a metaverse."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Field name"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:"right"},"Value"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"type")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"NFT type"),(0,r.kt)("td",{parentName:"tr",align:"right"},(0,r.kt)("inlineCode",{parentName:"td"},"metaverse.region"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"version")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Model version (for future compatibility)"),(0,r.kt)("td",{parentName:"tr",align:"right"},(0,r.kt)("inlineCode",{parentName:"td"},"1.0"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"meta")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"#region-metadata"},"object")),(0,r.kt)("td",{parentName:"tr",align:null},"Region metadata"),(0,r.kt)("td",{parentName:"tr",align:"right"})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"regions")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"#region-shape-types"},"array","<","object",">")),(0,r.kt)("td",{parentName:"tr",align:null},"Region parameters (multi-component regions allowed)"),(0,r.kt)("td",{parentName:"tr",align:"right"})))),(0,r.kt)("h3",{id:"example-1"},"Example"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{\n "type": "metaverse.region",\n "version": "1.0",\n "meta": {\n "server": {\n "type": "minecraft",\n "url": "http://10.10.10.10:25565",\n "pubkey": "c843d424bba89625d64fb592975180023e46b499388856fa832e287484adc4aa"\n },\n "signature": "cc9d3377f78d33a3d2d412d173f2b6e9e6dd06af19749d95032ea7c78eb07d873ddfe0b241a190900422732207dbbdc987b1bbcfd74d56404f0ab0d65d4f930e"\n },\n "regions": [\n {\n "shape": "cuboid",\n "params": {\n "position1": {\n "x": "0",\n "y": "-50",\n "z": "0"\n },\n "position2": {\n "x": "16",\n "y": "200",\n "z": "16"\n }\n }\n }\n ]\n}\n')),(0,r.kt)("h3",{id:"region-metadata"},"Region metadata"),(0,r.kt)("p",null,"This section must contain at least a minimum of the required information about the metaverse server where the region is located."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Field name"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:"right"},"Example value"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"server.type")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Type of metaverse that has issued the NFT token"),(0,r.kt)("td",{parentName:"tr",align:"right"},(0,r.kt)("inlineCode",{parentName:"td"},"minecraft"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"server.url")),(0,r.kt)("td",{parentName:"tr",align:null},"uri (optional)"),(0,r.kt)("td",{parentName:"tr",align:null},"Address where the server is located. Typically, the URL, from which the server actual metadata like name, description, etc. can be extracted."),(0,r.kt)("td",{parentName:"tr",align:"right"},(0,r.kt)("inlineCode",{parentName:"td"},"10.10.10.10:25565"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"server.pubkey")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Public key issued by the compatible NFT adapter used to sign the NFT content data"),(0,r.kt)("td",{parentName:"tr",align:"right"})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"signature")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"HEX representation of the signature, generated using ed25519 algorithm based on the contents of ",(0,r.kt)("inlineCode",{parentName:"td"},"regions")," array content (without the object name) and server private key.",(0,r.kt)("br",null),(0,r.kt)("br",null),"Before generation, the base JSON array must be compacted (i.e. all the whitespace and line breaks must be removed). In the example above, it will look as follows:",(0,r.kt)("br",null),(0,r.kt)("br",null),(0,r.kt)("inlineCode",{parentName:"td"},'[{"shape":"cuboid","params":{"position1":{"x":"0","y":"-50","z":"0"},"position2":{"x":"16","y":"200","z":"16"}}}]')),(0,r.kt)("td",{parentName:"tr",align:"right"})))),(0,r.kt)("h3",{id:"region-shape-types"},"Region shape types"),(0,r.kt)("p",null,"The reference implementation is inspired by Minecraft's Worldedit primitive region models."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:null},"Reference model"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"cuboid")),(0,r.kt)("td",{parentName:"tr",align:null},"Box-shaped region"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://github.com/EngineHub/WorldEdit/blob/b8a9c0070c72bbdd0d2c77fa8c537c01b0f73f85/worldedit-core/src/main/java/com/sk89q/worldedit/regions/selector/CuboidRegionSelector.java"},"Link"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"cylinder")),(0,r.kt)("td",{parentName:"tr",align:null},"Cylinder-shaped region"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://github.com/EngineHub/WorldEdit/blob/b8a9c0070c72bbdd0d2c77fa8c537c01b0f73f85/worldedit-core/src/main/java/com/sk89q/worldedit/regions/selector/CylinderRegionSelector.java"},"Link"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"sphere")),(0,r.kt)("td",{parentName:"tr",align:null},"Spheric-shaped region"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://github.com/EngineHub/WorldEdit/blob/b8a9c0070c72bbdd0d2c77fa8c537c01b0f73f85/worldedit-core/src/main/java/com/sk89q/worldedit/regions/selector/SphereRegionSelector.java"},"Link"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"polygon2d")),(0,r.kt)("td",{parentName:"tr",align:null},"2D-polygonal-shaped region"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://github.com/EngineHub/WorldEdit/blob/b8a9c0070c72bbdd0d2c77fa8c537c01b0f73f85/worldedit-core/src/main/java/com/sk89q/worldedit/regions/Polygonal2DRegion.java#L39"},"Link"))))),(0,r.kt)("h4",{id:"cuboid"},"Cuboid"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Cuboid")," is the simplest and the most popular shape of a region typically used in most metaverses."),(0,r.kt)("p",null,"It is defined by X, Y and Z coordinates of two points in the space (the order is insignificant), one of which is considered as the start (bottom, minimum) and the other one as the end (top, maximum) of the region."),(0,r.kt)("h5",{id:"cuboid-object-specification"},"Cuboid object specification"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Field name"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:"right"},"Value"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"shape")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Type of shape"),(0,r.kt)("td",{parentName:"tr",align:"right"},(0,r.kt)("inlineCode",{parentName:"td"},"cuboid"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"params.position1")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"#xyz"},"xyz")),(0,r.kt)("td",{parentName:"tr",align:null},"First vertex of the cuboid"),(0,r.kt)("td",{parentName:"tr",align:"right"})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"params.position2")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"#xyz"},"xyz")),(0,r.kt)("td",{parentName:"tr",align:null},"Second vertex of the cuboid"),(0,r.kt)("td",{parentName:"tr",align:"right"})))),(0,r.kt)("h5",{id:"example-usage"},"Example usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{\n "type": "metaverse.region",\n "version": "1.0",\n "meta": {},\n "regions": [\n {\n "shape": "cuboid",\n "params": {\n "position1": {\n "x": "0",\n "y": "-50",\n "z": "0"\n },\n "position2": {\n "x": "16",\n "y": "200",\n "z": "16"\n }\n }\n }\n ]\n}\n')),(0,r.kt)("h4",{id:"cylinder"},"Cylinder"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Cylinders")," are commonly used in central areas of large objects (lize plazas, fountains, etc)."),(0,r.kt)("p",null,"They are defined by coordinates of basic central point, radius, and height."),(0,r.kt)("h5",{id:"cylinder-object-specification"},"Cylinder object specification"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Field name"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:"right"},"Value"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"shape")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Type of shape"),(0,r.kt)("td",{parentName:"tr",align:"right"},(0,r.kt)("inlineCode",{parentName:"td"},"cylinder"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"params.center")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"#xyz"},"xyz")),(0,r.kt)("td",{parentName:"tr",align:null},"Basic central point of the cylinder"),(0,r.kt)("td",{parentName:"tr",align:"right"})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"params.radius")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Radius of the cylinder (number in string format for maximum compatibility)"),(0,r.kt)("td",{parentName:"tr",align:"right"})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"params.height")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Height of the cylinder (number in string format for maximum compatibility)",(0,r.kt)("br",null),(0,r.kt)("br",null),"For the avoidance of doubt, the Y coordinate of the opposite cylinder's side is calculated as ",(0,r.kt)("inlineCode",{parentName:"td"},"Y_basic + height")),(0,r.kt)("td",{parentName:"tr",align:"right"})))),(0,r.kt)("h5",{id:"example-usage-1"},"Example usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{\n "type": "metaverse.region",\n "version": "1.0",\n "meta": {},\n "regions": [\n {\n "shape": "cylinder",\n "params": {\n "center": {\n "x": "0",\n "y": "-50",\n "z": "0"\n },\n "radius": "16",\n "height": "100"\n }\n }\n ]\n}\n')),(0,r.kt)("h4",{id:"sphere"},"Sphere"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Spheres")," are typically used as parts of complex objects like sculptures, buildings, etc."),(0,r.kt)("p",null,"Sphere is described by coordinates of central point and radius."),(0,r.kt)("h5",{id:"spherical-object-specification"},"Spherical object specification"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Field name"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:"right"},"Value"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"shape")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Type of shape"),(0,r.kt)("td",{parentName:"tr",align:"right"},(0,r.kt)("inlineCode",{parentName:"td"},"sphere"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"params.center")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"#xyz"},"xyz")),(0,r.kt)("td",{parentName:"tr",align:null},"Basic central point of the sphere"),(0,r.kt)("td",{parentName:"tr",align:"right"})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"params.radius")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Radius of the sphere (number in string format for maximum compatibility)"),(0,r.kt)("td",{parentName:"tr",align:"right"})))),(0,r.kt)("h5",{id:"example-usage-2"},"Example usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{\n "type": "metaverse.region",\n "version": "1.0",\n "meta": {},\n "regions": [\n {\n "shape": "sphere",\n "params": {\n "center": {\n "x": "0",\n "y": "-50",\n "z": "0"\n },\n "radius": "16"\n }\n }\n ]\n}\n')),(0,r.kt)("h4",{id:"2d-polygon"},"2D polygon"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Polygons")," can represent an arbitrary set of vertices."),(0,r.kt)("p",null,"2D polygons assume that all vertices lay on the same plane. The whole object can be extended in height."),(0,r.kt)("h5",{id:"2d-polygon-object-specification"},"2D polygon object specification"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Field name"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:"right"},"Value"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"shape")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Type of shape"),(0,r.kt)("td",{parentName:"tr",align:"right"},(0,r.kt)("inlineCode",{parentName:"td"},"polygon2d"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"params.points")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"#xyz"},"list","<","xyz",">")),(0,r.kt)("td",{parentName:"tr",align:null},"Coordinates of polygon vetices"),(0,r.kt)("td",{parentName:"tr",align:"right"})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"params.height")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Height of the object (number in string format for maximum compatibility).",(0,r.kt)("br",null),(0,r.kt)("br",null),"For the avoidance of doubt, the Y coordinate of the opposite object's side is calculated as ",(0,r.kt)("inlineCode",{parentName:"td"},"Y_basic + height"),", where ",(0,r.kt)("inlineCode",{parentName:"td"},"Y_basic")," is the ",(0,r.kt)("inlineCode",{parentName:"td"},"Y")," coordinate of the first vertex in the array above."),(0,r.kt)("td",{parentName:"tr",align:"right"})))),(0,r.kt)("h4",{id:"shared-models"},"Shared models"),(0,r.kt)("h5",{id:"xyz"},"XYZ"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Field name"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:"right"},"Default value"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"x")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"X coordinate"),(0,r.kt)("td",{parentName:"tr",align:"right"},"0")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"y")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Y coordinate"),(0,r.kt)("td",{parentName:"tr",align:"right"},"0")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"z")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Z coordinate"),(0,r.kt)("td",{parentName:"tr",align:"right"},"0")))),(0,r.kt)("h4",{id:"standard-conventions"},"Standard conventions"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Numbers and coordinates interpretation depends on the specific metaverse defined in the ",(0,r.kt)("inlineCode",{parentName:"li"},"meta")," section of the NFT. For this standard purpose, the following convention is applied:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"X")," axis is a horizontal one pointing East;"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Y")," axis is a vertical one pointing up;"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Z")," is the orthogonal axis pointing south;",(0,r.kt)("br",null),(0,r.kt)("br",null),(0,r.kt)("img",{src:"https://static.wikia.nocookie.net/minecraft_gamepedia/images/5/51/Coordinates.png/revision/latest/scale-to-width-down/200?cb=20200729013357"})))),(0,r.kt)("li",{parentName:"ul"},"Numbers are stored as strings to ensure maximum compatibility;"),(0,r.kt)("li",{parentName:"ul"},"Numbers must not use scientific notation.")),(0,r.kt)("h2",{id:"how-to-add-the-new-json-metadata-type"},"How to add the new JSON metadata type?"),(0,r.kt)("p",null,"For added new metadata type of ",(0,r.kt)("a",{parentName:"p",href:"/standards/TIP/TIP-4/2"},"TIP-4.2")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Create product that use new JSON type."),(0,r.kt)("li",{parentName:"ul"},"Send PR for change the docs."),(0,r.kt)("li",{parentName:"ul"},"Explain why it will be in Standard.")),(0,r.kt)("h2",{id:"references"},"References"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The original ",(0,r.kt)("a",{parentName:"p",href:"https://docs.everscale.network/standard/TIP-4.2"},"TIP-4.2")," standard was developed and maintained by the Everscale network community.")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://eips.ethereum.org/EIPS/eip-721"},"Ethereum EIP-721")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.metaplex.com/token-metadata/specification"},"Solana v1.2.0")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/ton-blockchain/TIPs/issues/62"},"TON NFT"),", ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/ton-blockchain/TIPs/issues/64"},"TON DATA")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://gitlab.com/tezos/tzip/-/blob/master/proposals/tzip-12/tzip-12.md"},"Tezos TZIP12")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.binance.org/smart-chain/developer/nft-metadata-standard.html"},"BNS BEP721"))))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e945c59a.923a2748.js b/assets/js/e945c59a.923a2748.js new file mode 100644 index 000000000..9d869d915 --- /dev/null +++ b/assets/js/e945c59a.923a2748.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkve_ps=self.webpackChunkve_ps||[]).push([[561],{4137:(t,e,a)=>{a.d(e,{Zo:()=>m,kt:()=>u});var n=a(7294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function l(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function i(t){for(var e=1;e=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var p=n.createContext({}),d=function(t){var e=n.useContext(p),a=e;return t&&(a="function"==typeof t?t(e):i(i({},e),t)),a},m=function(t){var e=d(t.components);return n.createElement(p.Provider,{value:e},t.children)},s={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},k=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,l=t.originalType,p=t.parentName,m=o(t,["components","mdxType","originalType","parentName"]),k=d(a),u=r,g=k["".concat(p,".").concat(u)]||k[u]||s[u]||l;return a?n.createElement(g,i(i({ref:e},m),{},{components:a})):n.createElement(g,i({ref:e},m))}));function u(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=a.length,i=new Array(l);i[0]=k;var o={};for(var p in e)hasOwnProperty.call(e,p)&&(o[p]=e[p]);o.originalType=t,o.mdxType="string"==typeof t?t:r,i[1]=o;for(var d=2;d{a.r(e),a.d(e,{assets:()=>p,contentTitle:()=>i,default:()=>s,frontMatter:()=>l,metadata:()=>o,toc:()=>d});var n=a(7462),r=(a(7294),a(4137));const l={sidebar_position:2,sidebar_label:"TIP-4.2"},i="Non-Fungible Token JSON Metadata (TIP-4.2)",o={unversionedId:"standards/TIP/TIP-4/2",id:"standards/TIP/TIP-4/2",title:"Non-Fungible Token JSON Metadata (TIP-4.2)",description:"Requires: TIP-6.1",source:"@site/docs/standards/TIP/TIP-4/2.md",sourceDirName:"standards/TIP/TIP-4",slug:"/standards/TIP/TIP-4/2",permalink:"/standards/TIP/TIP-4/2",draft:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,sidebar_label:"TIP-4.2"},sidebar:"standardSidebar",previous:{title:"TIP-4.1",permalink:"/standards/TIP/TIP-4/1"},next:{title:"4.2.2 New JSON Metadata",permalink:"/standards/TIP/TIP-4/TIP-4.2.2"}},p={},d=[{value:"Abstract",id:"abstract",level:2},{value:"Motivation",id:"motivation",level:2},{value:"Specification",id:"specification",level:2},{value:"JSON metadata",id:"json-metadata",level:2},{value:"TIP4_2JSON_Metadata.getJson()",id:"tip4_2json_metadatagetjson",level:3},{value:"Empty JSON metadata",id:"empty-json-metadata",level:2},{value:"JSON metadata type",id:"json-metadata-type",level:2},{value:"JSON metadata type: "Basic NFT"",id:"json-metadata-type-basic-nft",level:2},{value:"Example",id:"example",level:3},{value:"JSON metadata type: metaverse.region",id:"json-metadata-type-metaverseregion",level:2},{value:"Example",id:"example-1",level:3},{value:"Region metadata",id:"region-metadata",level:3},{value:"Region shape types",id:"region-shape-types",level:3},{value:"Cuboid",id:"cuboid",level:4},{value:"Cuboid object specification",id:"cuboid-object-specification",level:5},{value:"Example usage",id:"example-usage",level:5},{value:"Cylinder",id:"cylinder",level:4},{value:"Cylinder object specification",id:"cylinder-object-specification",level:5},{value:"Example usage",id:"example-usage-1",level:5},{value:"Sphere",id:"sphere",level:4},{value:"Spherical object specification",id:"spherical-object-specification",level:5},{value:"Example usage",id:"example-usage-2",level:5},{value:"2D polygon",id:"2d-polygon",level:4},{value:"2D polygon object specification",id:"2d-polygon-object-specification",level:5},{value:"Shared models",id:"shared-models",level:4},{value:"XYZ",id:"xyz",level:5},{value:"Standard conventions",id:"standard-conventions",level:4},{value:"How to add the new JSON metadata type?",id:"how-to-add-the-new-json-metadata-type",level:2},{value:"References",id:"references",level:2}],m={toc:d};function s(t){let{components:e,...a}=t;return(0,r.kt)("wrapper",(0,n.Z)({},m,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"non-fungible-token-json-metadata-tip-42"},"Non-Fungible Token JSON Metadata (TIP-4.2)"),(0,r.kt)("p",null,"Requires: ",(0,r.kt)("a",{parentName:"p",href:"/standards/TIP/TIP-6/1"},"TIP-6.1")),(0,r.kt)("h2",{id:"abstract"},"Abstract"),(0,r.kt)("p",null,"Token-specific metadata is stored as a string in smart contract. To facilitate an off-chain working with metadata, it is JSON object. The below metadata structure allows the marketplaces to read and display the details about the assets which your NFTs represent."),(0,r.kt)("p",null,"This standard provides optional JSON fields and contract interface."),(0,r.kt)("h2",{id:"motivation"},"Motivation"),(0,r.kt)("p",null,"A standard fields facilitate displaying of NFT data for: wallets, explorers, marketplaces, etc."),(0,r.kt)("h2",{id:"specification"},"Specification"),(0,r.kt)("p",null,"The keywords \u201cMUST\u201d, \u201cMUST NOT\u201d, \u201cREQUIRED\u201d, \u201cSHALL\u201d, \u201cSHALL NOT\u201d, \u201cSHOULD\u201d, \u201cSHOULD NOT\u201d, \u201cRECOMMENDED\u201d, \u201cMAY\u201d, and \u201cOPTIONAL\u201d in this document are to be interpreted as described in ",(0,r.kt)("a",{parentName:"p",href:"https://datatracker.ietf.org/doc/html/rfc2119"},"RFC 2119")),(0,r.kt)("h2",{id:"json-metadata"},"JSON metadata"),(0,r.kt)("p",null,"Return the metadata as JSON"),(0,r.kt)("p",null,"Every TIP4.2 compliant contract must implement the ",(0,r.kt)("inlineCode",{parentName:"p"},"TIP4_2JSON_Metadata")," interface and ",(0,r.kt)("a",{parentName:"p",href:"/standards/TIP/TIP-6/1"},"TIP-6.1")," interfaces"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-solidity"},"pragma ton-solidity >= 0.58.0;\n\ninterface TIP4_2JSON_Metadata {\n\n /// @notice metadata in JSON format\n /// @return json The JSON string with metadata\n function getJson() external view responsible returns (string json);\n\n}\n")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"NOTE")," The ",(0,r.kt)("a",{parentName:"p",href:"/standards/TIP/TIP-6/1"},"TIP-6.1")," identifier for this interface is ",(0,r.kt)("inlineCode",{parentName:"p"},"0x24D7D5F5"),"."),(0,r.kt)("h3",{id:"tip4_2json_metadatagetjson"},"TIP4_2JSON_Metadata.getJson()"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-solidity"},"function getJson() external view responsible returns (string json);\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"json")," (",(0,r.kt)("inlineCode",{parentName:"li"},"string"),") - The JSON string with metadata")),(0,r.kt)("p",null,"The function return metadata as a JSON string."),(0,r.kt)("h2",{id:"empty-json-metadata"},"Empty JSON metadata"),(0,r.kt)("p",null,"Empty JSON metadata is represented as a blank JSON object or an empty string."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json"},"{}\n")),(0,r.kt)("h2",{id:"json-metadata-type"},"JSON metadata type"),(0,r.kt)("p",null,'Not empty JSON must have "type" field'),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{"type":"string"}\n')),(0,r.kt)("p",null,'Application that read JSON metadata use "type" field for parsing standard or custom JSON fields.'),(0,r.kt)("h2",{id:"json-metadata-type-basic-nft"},'JSON metadata type: "Basic NFT"'),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Basic NFT")," use for links to files stores in web. JSON fields contain information about item, files and preview info."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Basic NFT")," describes fields that must be in JSON"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Field name"),(0,r.kt)("th",{parentName:"tr",align:null},"type"),(0,r.kt)("th",{parentName:"tr",align:null},"Value"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"type")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},'"Basic NFT"'),(0,r.kt)("td",{parentName:"tr",align:null},"Constant name for this type")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"name")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Name of the object")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"description")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Description of the object")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"preview")),(0,r.kt)("td",{parentName:"tr",align:null},"object"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Object preview")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"preview.source")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Link to object. Contains protocol and data source. Delimiter is ",(0,r.kt)("strong",{parentName:"td"},":"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"preview.mimetype")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types"},"Mime type")," of object")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"files")),(0,r.kt)("td",{parentName:"tr",align:null},"array"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Array of objects.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"file.source")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Link to object. Contains protocol and data source. Delimiter is ",(0,r.kt)("strong",{parentName:"td"},":"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"file.mimetype")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types"},"Mime type")," of object")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"external_url")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"URL to website")))),(0,r.kt)("h3",{id:"example"},"Example"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-JSON"},'{\n "type": "Basic NFT",\n "name": "Sample Name",\n "description": "Hello world!",\n "preview": {\n "source": "https://nft.venom/images/Backgrounds/Main/main-hero.png",\n "mimetype": "image/png"\n },\n "files": [\n {\n "source": "https://nft.venom/images/Backgrounds/Main/main-hero.png",\n "mimetype": "image/png"\n }\n ],\n "external_url": "https://nft.venom"\n}\n')),(0,r.kt)("p",null,"You can extend ",(0,r.kt)("inlineCode",{parentName:"p"},"Basic NFT")," type for your custom fields."),(0,r.kt)("h2",{id:"json-metadata-type-metaverseregion"},"JSON metadata type: ",(0,r.kt)("inlineCode",{parentName:"h2"},"metaverse.region")),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"metaverse.region")," JSON object stores the unique reference to a specific region (bundle of regions) inside a metaverse."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Field name"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:"right"},"Value"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"type")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"NFT type"),(0,r.kt)("td",{parentName:"tr",align:"right"},(0,r.kt)("inlineCode",{parentName:"td"},"metaverse.region"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"version")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Model version (for future compatibility)"),(0,r.kt)("td",{parentName:"tr",align:"right"},(0,r.kt)("inlineCode",{parentName:"td"},"1.0"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"meta")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"#region-metadata"},"object")),(0,r.kt)("td",{parentName:"tr",align:null},"Region metadata"),(0,r.kt)("td",{parentName:"tr",align:"right"})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"regions")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"#region-shape-types"},"array","<","object",">")),(0,r.kt)("td",{parentName:"tr",align:null},"Region parameters (multi-component regions allowed)"),(0,r.kt)("td",{parentName:"tr",align:"right"})))),(0,r.kt)("h3",{id:"example-1"},"Example"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{\n "type": "metaverse.region",\n "version": "1.0",\n "meta": {\n "server": {\n "type": "minecraft",\n "url": "http://10.10.10.10:25565",\n "pubkey": "c843d424bba89625d64fb592975180023e46b499388856fa832e287484adc4aa"\n },\n "signature": "cc9d3377f78d33a3d2d412d173f2b6e9e6dd06af19749d95032ea7c78eb07d873ddfe0b241a190900422732207dbbdc987b1bbcfd74d56404f0ab0d65d4f930e"\n },\n "regions": [\n {\n "shape": "cuboid",\n "params": {\n "position1": {\n "x": "0",\n "y": "-50",\n "z": "0"\n },\n "position2": {\n "x": "16",\n "y": "200",\n "z": "16"\n }\n }\n }\n ]\n}\n')),(0,r.kt)("h3",{id:"region-metadata"},"Region metadata"),(0,r.kt)("p",null,"This section must contain at least a minimum of the required information about the metaverse server where the region is located."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Field name"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:"right"},"Example value"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"server.type")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Type of metaverse that has issued the NFT token"),(0,r.kt)("td",{parentName:"tr",align:"right"},(0,r.kt)("inlineCode",{parentName:"td"},"minecraft"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"server.url")),(0,r.kt)("td",{parentName:"tr",align:null},"uri (optional)"),(0,r.kt)("td",{parentName:"tr",align:null},"Address where the server is located. Typically, the URL, from which the server actual metadata like name, description, etc. can be extracted."),(0,r.kt)("td",{parentName:"tr",align:"right"},(0,r.kt)("inlineCode",{parentName:"td"},"10.10.10.10:25565"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"server.pubkey")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Public key issued by the compatible NFT adapter used to sign the NFT content data"),(0,r.kt)("td",{parentName:"tr",align:"right"})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"signature")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"HEX representation of the signature, generated using ed25519 algorithm based on the contents of ",(0,r.kt)("inlineCode",{parentName:"td"},"regions")," array content (without the object name) and server private key.",(0,r.kt)("br",null),(0,r.kt)("br",null),"Before generation, the base JSON array must be compacted (i.e. all the whitespace and line breaks must be removed). In the example above, it will look as follows:",(0,r.kt)("br",null),(0,r.kt)("br",null),(0,r.kt)("inlineCode",{parentName:"td"},'[{"shape":"cuboid","params":{"position1":{"x":"0","y":"-50","z":"0"},"position2":{"x":"16","y":"200","z":"16"}}}]')),(0,r.kt)("td",{parentName:"tr",align:"right"})))),(0,r.kt)("h3",{id:"region-shape-types"},"Region shape types"),(0,r.kt)("p",null,"The reference implementation is inspired by Minecraft's Worldedit primitive region models."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:null},"Reference model"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"cuboid")),(0,r.kt)("td",{parentName:"tr",align:null},"Box-shaped region"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://github.com/EngineHub/WorldEdit/blob/b8a9c0070c72bbdd0d2c77fa8c537c01b0f73f85/worldedit-core/src/main/java/com/sk89q/worldedit/regions/selector/CuboidRegionSelector.java"},"Link"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"cylinder")),(0,r.kt)("td",{parentName:"tr",align:null},"Cylinder-shaped region"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://github.com/EngineHub/WorldEdit/blob/b8a9c0070c72bbdd0d2c77fa8c537c01b0f73f85/worldedit-core/src/main/java/com/sk89q/worldedit/regions/selector/CylinderRegionSelector.java"},"Link"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"sphere")),(0,r.kt)("td",{parentName:"tr",align:null},"Spheric-shaped region"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://github.com/EngineHub/WorldEdit/blob/b8a9c0070c72bbdd0d2c77fa8c537c01b0f73f85/worldedit-core/src/main/java/com/sk89q/worldedit/regions/selector/SphereRegionSelector.java"},"Link"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"polygon2d")),(0,r.kt)("td",{parentName:"tr",align:null},"2D-polygonal-shaped region"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://github.com/EngineHub/WorldEdit/blob/b8a9c0070c72bbdd0d2c77fa8c537c01b0f73f85/worldedit-core/src/main/java/com/sk89q/worldedit/regions/Polygonal2DRegion.java#L39"},"Link"))))),(0,r.kt)("h4",{id:"cuboid"},"Cuboid"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Cuboid")," is the simplest and the most popular shape of a region typically used in most metaverses."),(0,r.kt)("p",null,"It is defined by X, Y and Z coordinates of two points in the space (the order is insignificant), one of which is considered as the start (bottom, minimum) and the other one as the end (top, maximum) of the region."),(0,r.kt)("h5",{id:"cuboid-object-specification"},"Cuboid object specification"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Field name"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:"right"},"Value"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"shape")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Type of shape"),(0,r.kt)("td",{parentName:"tr",align:"right"},(0,r.kt)("inlineCode",{parentName:"td"},"cuboid"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"params.position1")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"#xyz"},"xyz")),(0,r.kt)("td",{parentName:"tr",align:null},"First vertex of the cuboid"),(0,r.kt)("td",{parentName:"tr",align:"right"})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"params.position2")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"#xyz"},"xyz")),(0,r.kt)("td",{parentName:"tr",align:null},"Second vertex of the cuboid"),(0,r.kt)("td",{parentName:"tr",align:"right"})))),(0,r.kt)("h5",{id:"example-usage"},"Example usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{\n "type": "metaverse.region",\n "version": "1.0",\n "meta": {},\n "regions": [\n {\n "shape": "cuboid",\n "params": {\n "position1": {\n "x": "0",\n "y": "-50",\n "z": "0"\n },\n "position2": {\n "x": "16",\n "y": "200",\n "z": "16"\n }\n }\n }\n ]\n}\n')),(0,r.kt)("h4",{id:"cylinder"},"Cylinder"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Cylinders")," are commonly used in central areas of large objects (lize plazas, fountains, etc)."),(0,r.kt)("p",null,"They are defined by coordinates of basic central point, radius, and height."),(0,r.kt)("h5",{id:"cylinder-object-specification"},"Cylinder object specification"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Field name"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:"right"},"Value"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"shape")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Type of shape"),(0,r.kt)("td",{parentName:"tr",align:"right"},(0,r.kt)("inlineCode",{parentName:"td"},"cylinder"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"params.center")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"#xyz"},"xyz")),(0,r.kt)("td",{parentName:"tr",align:null},"Basic central point of the cylinder"),(0,r.kt)("td",{parentName:"tr",align:"right"})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"params.radius")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Radius of the cylinder (number in string format for maximum compatibility)"),(0,r.kt)("td",{parentName:"tr",align:"right"})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"params.height")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Height of the cylinder (number in string format for maximum compatibility)",(0,r.kt)("br",null),(0,r.kt)("br",null),"For the avoidance of doubt, the Y coordinate of the opposite cylinder's side is calculated as ",(0,r.kt)("inlineCode",{parentName:"td"},"Y_basic + height")),(0,r.kt)("td",{parentName:"tr",align:"right"})))),(0,r.kt)("h5",{id:"example-usage-1"},"Example usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{\n "type": "metaverse.region",\n "version": "1.0",\n "meta": {},\n "regions": [\n {\n "shape": "cylinder",\n "params": {\n "center": {\n "x": "0",\n "y": "-50",\n "z": "0"\n },\n "radius": "16",\n "height": "100"\n }\n }\n ]\n}\n')),(0,r.kt)("h4",{id:"sphere"},"Sphere"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Spheres")," are typically used as parts of complex objects like sculptures, buildings, etc."),(0,r.kt)("p",null,"Sphere is described by coordinates of central point and radius."),(0,r.kt)("h5",{id:"spherical-object-specification"},"Spherical object specification"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Field name"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:"right"},"Value"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"shape")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Type of shape"),(0,r.kt)("td",{parentName:"tr",align:"right"},(0,r.kt)("inlineCode",{parentName:"td"},"sphere"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"params.center")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"#xyz"},"xyz")),(0,r.kt)("td",{parentName:"tr",align:null},"Basic central point of the sphere"),(0,r.kt)("td",{parentName:"tr",align:"right"})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"params.radius")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Radius of the sphere (number in string format for maximum compatibility)"),(0,r.kt)("td",{parentName:"tr",align:"right"})))),(0,r.kt)("h5",{id:"example-usage-2"},"Example usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{\n "type": "metaverse.region",\n "version": "1.0",\n "meta": {},\n "regions": [\n {\n "shape": "sphere",\n "params": {\n "center": {\n "x": "0",\n "y": "-50",\n "z": "0"\n },\n "radius": "16"\n }\n }\n ]\n}\n')),(0,r.kt)("h4",{id:"2d-polygon"},"2D polygon"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Polygons")," can represent an arbitrary set of vertices."),(0,r.kt)("p",null,"2D polygons assume that all vertices lay on the same plane. The whole object can be extended in height."),(0,r.kt)("h5",{id:"2d-polygon-object-specification"},"2D polygon object specification"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Field name"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:"right"},"Value"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"shape")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Type of shape"),(0,r.kt)("td",{parentName:"tr",align:"right"},(0,r.kt)("inlineCode",{parentName:"td"},"polygon2d"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"params.points")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"#xyz"},"list","<","xyz",">")),(0,r.kt)("td",{parentName:"tr",align:null},"Coordinates of polygon vetices"),(0,r.kt)("td",{parentName:"tr",align:"right"})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"params.height")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Height of the object (number in string format for maximum compatibility).",(0,r.kt)("br",null),(0,r.kt)("br",null),"For the avoidance of doubt, the Y coordinate of the opposite object's side is calculated as ",(0,r.kt)("inlineCode",{parentName:"td"},"Y_basic + height"),", where ",(0,r.kt)("inlineCode",{parentName:"td"},"Y_basic")," is the ",(0,r.kt)("inlineCode",{parentName:"td"},"Y")," coordinate of the first vertex in the array above."),(0,r.kt)("td",{parentName:"tr",align:"right"})))),(0,r.kt)("h4",{id:"shared-models"},"Shared models"),(0,r.kt)("h5",{id:"xyz"},"XYZ"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Field name"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:"right"},"Default value"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"x")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"X coordinate"),(0,r.kt)("td",{parentName:"tr",align:"right"},"0")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"y")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Y coordinate"),(0,r.kt)("td",{parentName:"tr",align:"right"},"0")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"z")),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Z coordinate"),(0,r.kt)("td",{parentName:"tr",align:"right"},"0")))),(0,r.kt)("h4",{id:"standard-conventions"},"Standard conventions"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Numbers and coordinates interpretation depends on the specific metaverse defined in the ",(0,r.kt)("inlineCode",{parentName:"li"},"meta")," section of the NFT. For this standard purpose, the following convention is applied:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"X")," axis is a horizontal one pointing East;"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Y")," axis is a vertical one pointing up;"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Z")," is the orthogonal axis pointing south;",(0,r.kt)("br",null),(0,r.kt)("br",null),(0,r.kt)("img",{src:"https://static.wikia.nocookie.net/minecraft_gamepedia/images/5/51/Coordinates.png/revision/latest/scale-to-width-down/200?cb=20200729013357"})))),(0,r.kt)("li",{parentName:"ul"},"Numbers are stored as strings to ensure maximum compatibility;"),(0,r.kt)("li",{parentName:"ul"},"Numbers must not use scientific notation.")),(0,r.kt)("h2",{id:"how-to-add-the-new-json-metadata-type"},"How to add the new JSON metadata type?"),(0,r.kt)("p",null,"For added new metadata type of ",(0,r.kt)("a",{parentName:"p",href:"/standards/TIP/TIP-4/2"},"TIP-4.2")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Create product that use new JSON type."),(0,r.kt)("li",{parentName:"ul"},"Send PR for change the docs."),(0,r.kt)("li",{parentName:"ul"},"Explain why it will be in Standard.")),(0,r.kt)("h2",{id:"references"},"References"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The original ",(0,r.kt)("a",{parentName:"p",href:"https://docs.everscale.network/standard/TIP-4.2"},"TIP-4.2")," standard was developed and maintained by the Everscale network community.")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://eips.ethereum.org/EIPS/eip-721"},"Ethereum EIP-721")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.metaplex.com/token-metadata/specification"},"Solana v1.2.0")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/ton-blockchain/TIPs/issues/62"},"TON NFT"),", ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/ton-blockchain/TIPs/issues/64"},"TON DATA")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://gitlab.com/tezos/tzip/-/blob/master/proposals/tzip-12/tzip-12.md"},"Tezos TZIP12")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.binance.org/smart-chain/developer/nft-metadata-standard.html"},"BNS BEP721"))))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/main.5d55f8bc.js b/assets/js/main.5d55f8bc.js deleted file mode 100644 index 18bd50537..000000000 --- a/assets/js/main.5d55f8bc.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.5d55f8bc.js.LICENSE.txt */ -(self.webpackChunkve_ps=self.webpackChunkve_ps||[]).push([[179],{997:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),a=n(7462),o=n(8356),i=n.n(o),l=n(6887);const s={"045e98ae":[()=>n.e(4746).then(n.bind(n,8780)),"@site/docs/faq/readme.md",8780],"08a2cefb":[()=>n.e(8812).then(n.bind(n,4486)),"@site/docs/standards/TIP/TIP-4/3.md",4486],"09579a33":[()=>n.e(2997).then(n.bind(n,6056)),"@site/docs/build/development-guides/how-to-create-your-own-fungible-tip-3-token/quick-start-developing-with-tip-3.md",6056],"121e3c93":[()=>n.e(5028).then(n.bind(n,4244)),"@site/docs/start/learn/gas-and-fees.md",4244],"12b1dfe0":[()=>n.e(4452).then(n.bind(n,9080)),"@site/docs/standards/TIP/TIP-3/2.md",9080],17896441:[()=>Promise.all([n.e(532),n.e(7918)]).then(n.bind(n,408)),"@theme/DocItem",408],"1a4e3797":[()=>Promise.all([n.e(532),n.e(118),n.e(1437),n.e(7920)]).then(n.bind(n,1437)),"@theme/SearchPage",1437],"1be78505":[()=>Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,1299)),"@theme/DocPage",1299],"1df93b7f":[()=>Promise.all([n.e(532),n.e(3237)]).then(n.bind(n,546)),"@site/src/pages/index.tsx",546],"225d4f5c":[()=>n.e(524).then(n.bind(n,8470)),"@site/docs/standards/LICENSE.md",8470],"257e53a8":[()=>n.e(9279).then(n.bind(n,4877)),"@site/docs/start/learn/consensus.md",4877],"2b97e37d":[()=>n.e(7418).then(n.bind(n,3938)),"@site/docs/standards/TIP/TIP-3/1.md",3938],"2c68bf54":[()=>n.e(3979).then(n.bind(n,3142)),"@site/docs/start/learn/tokens-and-assets.md",3142],"2d09c271":[()=>n.e(4660).then(n.bind(n,7833)),"@site/docs/standards/VEP/vep-1155.md",7833],"2f6fa571":[()=>n.e(8094).then(n.bind(n,9399)),"@site/docs/build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/going-global.md",9399],"3463c4a6":[()=>Promise.all([n.e(1765),n.e(9793)]).then(n.bind(n,2519)),"@site/docs/start/general/wallet/creating-new-wallet.md",2519],"34c73200":[()=>n.e(1859).then(n.bind(n,5835)),"@site/docs/start/general/whats-new.md",5835],"3734018e":[()=>n.e(8041).then(n.bind(n,2716)),"@site/docs/standards/VEP/readme.md",2716],"3d6e6ded":[()=>n.e(7756).then(n.bind(n,2955)),"@site/docs/build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/setting-up-wallet-account.md",2955],"3e16242e":[()=>Promise.all([n.e(1765),n.e(9116)]).then(n.bind(n,2516)),"@site/docs/start/general/wallet/how-to-sign-in-into-the-wallet.md",2516],"3eb892d0":[()=>Promise.all([n.e(1765),n.e(8862)]).then(n.bind(n,7406)),"@site/docs/start/general/wallet/the-main/send.md",7406],40309562:[()=>n.e(6451).then(n.bind(n,7572)),"@site/docs/start/general/developer-programm.md",7572],"44e01e5d":[()=>n.e(8507).then(n.bind(n,1933)),"@site/docs/standards/TIP/TIP-4/5.md",1933],"4ae28b6f":[()=>n.e(6259).then(n.bind(n,3997)),"@site/docs/start/maintain/network-maintainers.md",3997],"4faa2d79":[()=>Promise.all([n.e(532),n.e(9121)]).then(n.bind(n,940)),"@site/docs/start/general/community.md",940],"51d35226":[()=>n.e(3635).then(n.bind(n,184)),"@site/docs/build/development-guides/developing-of-simple-voting-system/venom-in-action/ways-of-code-enhancing.md",184],"56dec9e6":[()=>n.e(4943).then(n.bind(n,396)),"@site/docs/start/learn/messages-and-transactions.md",396],"59ceca6b":[()=>n.e(5468).then(n.t.bind(n,3769,19)),"/home/runner/work/venom-blockchain.github.io/venom-blockchain.github.io/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],69712376:[()=>Promise.all([n.e(1765),n.e(6841)]).then(n.bind(n,2837)),"@site/docs/start/general/balance-transfers.md",2837],"69b6342a":[()=>Promise.all([n.e(1765),n.e(7218)]).then(n.bind(n,9006)),"@site/docs/start/general/wallet/the-ledger/the-ledger.md",9006],"739da9ed":[()=>n.e(1236).then(n.bind(n,7531)),"@site/docs/build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/simple-nft-auction.md",7531],"7541093d":[()=>n.e(5405).then(n.bind(n,294)),"@site/docs/build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/frontend-for-nft-collection.md",294],"79911bc2":[()=>Promise.all([n.e(1765),n.e(1798)]).then(n.bind(n,1146)),"@site/docs/start/general/wallet/multisignature-account/creating-tracking-account.md",1146],"7ae0ed82":[()=>n.e(4379).then(n.bind(n,8145)),"@site/docs/start/maintain/how-to-become-a-validator.md",8145],"7e9850e3":[()=>n.e(1642).then(n.t.bind(n,8137,19)),"/home/runner/work/venom-blockchain.github.io/venom-blockchain.github.io/.docusaurus/docusaurus-theme-search-typesense/default/plugin-route-context-module-100.json",8137],"7fcc4196":[()=>n.e(9843).then(n.bind(n,7722)),"@site/docs/standards/TIP/TIP-6/1.md",7722],"8d89b7ea":[()=>n.e(7865).then(n.bind(n,8777)),"@site/docs/build/development-guides/readme.md",8777],"92fe415d":[()=>n.e(3486).then(n.bind(n,1843)),"@site/docs/build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/quick-start-developing-with-tip-4.md",1843],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"97ebfec1":[()=>Promise.all([n.e(5914),n.e(501)]).then(n.bind(n,9843)),"@site/docs/build/tools-and-resources.md",9843],98446694:[()=>Promise.all([n.e(1765),n.e(4324)]).then(n.bind(n,4822)),"@site/docs/start/general/wallet/multisignature-account/creating-a-multisignature-account.md",4822],"99e38c7e":[()=>n.e(3717).then(n.bind(n,9483)),"@site/docs/build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/simple-tokensale.md",9483],a0d0b40e:[()=>n.e(6548).then(n.bind(n,5506)),"@site/docs/build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/ways-of-code-enhancing.md",5506],a1f55b96:[()=>n.e(5129).then(n.bind(n,1990)),"@site/docs/standards/TIP/TIP-4/4.md",1990],a4bdc0b9:[()=>n.e(2525).then(n.bind(n,9532)),"@site/docs/start/general/welcome-to-venom.md",9532],a501b208:[()=>n.e(8514).then(n.bind(n,7166)),"@site/docs/build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/frontend-for-nft-auction.md",7166],a525242d:[()=>n.e(8343).then(n.bind(n,7534)),"@site/docs/start/general/wallet/the-ledger/installing-everscale-on-ledger-live.md",7534],a7b99c39:[()=>n.e(6455).then(n.bind(n,4775)),"@site/docs/standards/TIP/TIP-4/core-description.md",4775],aade933b:[()=>n.e(7496).then(n.bind(n,2723)),"@site/docs/build/quick-start-on-testnet.md",2723],ab0e9fcd:[()=>n.e(9536).then(n.bind(n,6980)),"@site/docs/standards/TIP/TIP-6/core-description.md",6980],ab83b285:[()=>n.e(8518).then(n.bind(n,8213)),"@site/docs/start/learn/architecture.md",8213],ac4b64b2:[()=>n.e(1073).then(n.bind(n,3158)),"@site/docs/standards/VEP/vep-2981.md",3158],b7857f33:[()=>n.e(5621).then(n.bind(n,2821)),"@site/docs/standards/TIP/TIP-4/1.md",2821],bb5a06a2:[()=>Promise.all([n.e(1765),n.e(3216)]).then(n.bind(n,7907)),"@site/docs/start/general/wallet/manage-seeds-and-accounts.md",7907],bc5fb78d:[()=>n.e(2282).then(n.bind(n,8671)),"@site/docs/build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/readme.md",8671],be9133a1:[()=>n.e(9409).then(n.bind(n,8250)),"@site/docs/start/general/presskit.md",8250],bebb4e8e:[()=>n.e(4771).then(n.bind(n,8866)),"@site/docs/build/development-guides/developing-of-simple-voting-system/voting-system-basics.md",8866],c064784e:[()=>n.e(6706).then(n.bind(n,2383)),"@site/docs/standards/VEP/vep-33.md",2383],c1f259b3:[()=>n.e(9090).then(n.bind(n,3021)),"@site/docs/build/development-guides/developing-of-simple-voting-system/venom-in-action/voting-system-contracts.md",3021],c46fd6fa:[()=>n.e(8563).then(n.bind(n,2177)),"@site/docs/build/development-guides/developing-of-simple-voting-system/venom-in-action/extend-our-voting-system-with-backend.md",2177],c4a5fca0:[()=>n.e(8835).then(n.bind(n,5230)),"@site/docs/build/development-guides/how-to-create-your-own-fungible-tip-3-token/fungible-tokens-in-venom-network.md",5230],c5071f71:[()=>Promise.all([n.e(1765),n.e(5677)]).then(n.bind(n,7208)),"@site/docs/start/general/wallet/the-main/transactions.md",7208],c507b976:[()=>n.e(8720).then(n.bind(n,4714)),"@site/docs/build/development-guides/setting-up-the-venom-smart-contract-development-environment.md",4714],c56974eb:[()=>n.e(9701).then(n.bind(n,5332)),"@site/docs/build/development-guides/using-evercloud-graphql-api-to-work-with-venom/graphql-api-guides.md",5332],c66d41d6:[()=>n.e(542).then(n.bind(n,3139)),"@site/docs/build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/monitoring-transactions.md",3139],c9382a90:[()=>n.e(4714).then(n.bind(n,548)),"@site/docs/standards/TIP/TIP-3/core-description.md",548],ca1f5562:[()=>n.e(5115).then(n.bind(n,3658)),"@site/docs/build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/non-fungible-tokens-in-venom-network.md",3658],d0534b68:[()=>n.e(9115).then(n.bind(n,8203)),"@site/docs/build/development-guides/using-evercloud-graphql-api-to-work-with-venom/graphql-quick-start.md",8203],d211d554:[()=>Promise.all([n.e(1765),n.e(7315)]).then(n.bind(n,1458)),"@site/docs/start/general/wallet/multisignature-account/sending-tokens-from-the-multisignature-account.md",1458],d49648a8:[()=>n.e(1422).then(n.t.bind(n,5745,19)),"/home/runner/work/venom-blockchain.github.io/venom-blockchain.github.io/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],dd0a33e6:[()=>n.e(5534).then(n.bind(n,7770)),"@site/docs/start/general/ecosystem.md",7770],de855b74:[()=>Promise.all([n.e(1765),n.e(8469)]).then(n.bind(n,7322)),"@site/docs/start/general/wallet/how-to-create-a-backup-file.md",7322],e02bc103:[()=>n.e(2042).then(n.bind(n,2646)),"@site/docs/start/learn/accounts.md",2646],e0c53c28:[()=>n.e(5386).then(n.bind(n,2823)),"@site/docs/build/development-guides/comparing-of-ethereum-vs-venom-architectures.md",2823],e55fcd38:[()=>n.e(5734).then(n.bind(n,1099)),"@site/docs/build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/extend-our-tokensale-with-frontend.md",1099],e5ebf8b5:[()=>n.e(2120).then(n.bind(n,3552)),"@site/docs/faq/programming.md",3552],e945c59a:[()=>n.e(561).then(n.bind(n,8505)),"@site/docs/standards/TIP/TIP-4/2.md",8505],ec2c19d7:[()=>n.e(2989).then(n.bind(n,5509)),"@site/docs/standards/VEP/vep-1.md",5509],ef97d884:[()=>n.e(1179).then(n.bind(n,7434)),"@site/docs/build/development-guides/using-evercloud-graphql-api-to-work-with-venom/readme.md",7434],f4cc894f:[()=>n.e(2554).then(n.bind(n,1388)),"@site/docs/standards/VEP/vep-1111.md",1388],f6b5d3fb:[()=>n.e(5561).then(n.bind(n,5015)),"@site/docs/build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/sending-transactions.md",5015],f6ceb587:[()=>n.e(5198).then(n.bind(n,1860)),"@site/docs/start/learn/threaded-virtual-machine.md",1860],f7fdf4e2:[()=>n.e(4140).then(n.bind(n,5228)),"@site/docs/start/learn/glossary.md",5228],f9c96d29:[()=>Promise.all([n.e(1765),n.e(1870)]).then(n.bind(n,8578)),"@site/docs/start/general/wallet/the-main/the-main.md",8578],fd450c7c:[()=>n.e(1243).then(n.bind(n,7475)),"@site/docs/faq/integration.md",7475]};function u(e){let{error:t,retry:n,pastDelay:a}=e;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):a?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var c=n(5304),d=n(9656);function f(e,t){if("*"===e)return i()({loading:u,loader:()=>n.e(4248).then(n.bind(n,4248)),modules:["@theme/NotFound"],webpack:()=>[4248],render(e,t){const n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const o=l[`${e}-${t}`],f={},p=[],m=[],h=(0,c.Z)(o);return Object.entries(h).forEach((e=>{let[t,n]=e;const r=s[n];r&&(f[t]=r[0],p.push(r[1]),m.push(r[2]))})),i().Map({loading:u,loader:f,modules:p,webpack:()=>m,render(t,n){const i=JSON.parse(JSON.stringify(o));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let o=i;const l=n.split(".");l.slice(0,-1).forEach((e=>{o=o[e]})),o[l[l.length-1]]=a}));const l=i.__comp;delete i.__comp;const s=i.__context;return delete i.__context,r.createElement(d.z,{value:s},r.createElement(l,(0,a.Z)({},i,n)))}})}const p=[{path:"/search",component:f("/search","7e6"),exact:!0},{path:"/",component:f("/","a15"),exact:!0},{path:"/",component:f("/","477"),routes:[{path:"/build/development-guides/",component:f("/build/development-guides/","e4f"),exact:!0,sidebar:"buildSidebar"},{path:"/build/development-guides/comparing-of-ethereum-vs-venom-architectures",component:f("/build/development-guides/comparing-of-ethereum-vs-venom-architectures","04c"),exact:!0,sidebar:"buildSidebar"},{path:"/build/development-guides/developing-of-simple-voting-system/venom-in-action/extend-our-voting-system-with-backend",component:f("/build/development-guides/developing-of-simple-voting-system/venom-in-action/extend-our-voting-system-with-backend","20c"),exact:!0,sidebar:"buildSidebar"},{path:"/build/development-guides/developing-of-simple-voting-system/venom-in-action/voting-system-contracts",component:f("/build/development-guides/developing-of-simple-voting-system/venom-in-action/voting-system-contracts","4e1"),exact:!0,sidebar:"buildSidebar"},{path:"/build/development-guides/developing-of-simple-voting-system/venom-in-action/ways-of-code-enhancing",component:f("/build/development-guides/developing-of-simple-voting-system/venom-in-action/ways-of-code-enhancing","975"),exact:!0,sidebar:"buildSidebar"},{path:"/build/development-guides/developing-of-simple-voting-system/voting-system-basics",component:f("/build/development-guides/developing-of-simple-voting-system/voting-system-basics","0fd"),exact:!0,sidebar:"buildSidebar"},{path:"/build/development-guides/how-to-create-your-own-fungible-tip-3-token/fungible-tokens-in-venom-network",component:f("/build/development-guides/how-to-create-your-own-fungible-tip-3-token/fungible-tokens-in-venom-network","dce"),exact:!0,sidebar:"buildSidebar"},{path:"/build/development-guides/how-to-create-your-own-fungible-tip-3-token/quick-start-developing-with-tip-3",component:f("/build/development-guides/how-to-create-your-own-fungible-tip-3-token/quick-start-developing-with-tip-3","b5b"),exact:!0,sidebar:"buildSidebar"},{path:"/build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/extend-our-tokensale-with-frontend",component:f("/build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/extend-our-tokensale-with-frontend","d83"),exact:!0,sidebar:"buildSidebar"},{path:"/build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/going-global",component:f("/build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/going-global","8b8"),exact:!0,sidebar:"buildSidebar"},{path:"/build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/simple-tokensale",component:f("/build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/simple-tokensale","949"),exact:!0,sidebar:"buildSidebar"},{path:"/build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/ways-of-code-enhancing",component:f("/build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/ways-of-code-enhancing","df5"),exact:!0,sidebar:"buildSidebar"},{path:"/build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/non-fungible-tokens-in-venom-network",component:f("/build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/non-fungible-tokens-in-venom-network","8fc"),exact:!0,sidebar:"buildSidebar"},{path:"/build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/quick-start-developing-with-tip-4",component:f("/build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/quick-start-developing-with-tip-4","b9b"),exact:!0,sidebar:"buildSidebar"},{path:"/build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/frontend-for-nft-auction",component:f("/build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/frontend-for-nft-auction","646"),exact:!0,sidebar:"buildSidebar"},{path:"/build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/frontend-for-nft-collection",component:f("/build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/frontend-for-nft-collection","3c3"),exact:!0,sidebar:"buildSidebar"},{path:"/build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/simple-nft-auction",component:f("/build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/simple-nft-auction","d7a"),exact:!0,sidebar:"buildSidebar"},{path:"/build/development-guides/setting-up-the-venom-smart-contract-development-environment",component:f("/build/development-guides/setting-up-the-venom-smart-contract-development-environment","d1a"),exact:!0,sidebar:"buildSidebar"},{path:"/build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/",component:f("/build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/","f0d"),exact:!0,sidebar:"buildSidebar"},{path:"/build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/monitoring-transactions",component:f("/build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/monitoring-transactions","35c"),exact:!0,sidebar:"buildSidebar"},{path:"/build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/sending-transactions",component:f("/build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/sending-transactions","7f3"),exact:!0,sidebar:"buildSidebar"},{path:"/build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/setting-up-wallet-account",component:f("/build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/setting-up-wallet-account","83e"),exact:!0,sidebar:"buildSidebar"},{path:"/build/development-guides/using-evercloud-graphql-api-to-work-with-venom/",component:f("/build/development-guides/using-evercloud-graphql-api-to-work-with-venom/","926"),exact:!0,sidebar:"buildSidebar"},{path:"/build/development-guides/using-evercloud-graphql-api-to-work-with-venom/graphql-api-guides",component:f("/build/development-guides/using-evercloud-graphql-api-to-work-with-venom/graphql-api-guides","644"),exact:!0,sidebar:"buildSidebar"},{path:"/build/development-guides/using-evercloud-graphql-api-to-work-with-venom/graphql-quick-start",component:f("/build/development-guides/using-evercloud-graphql-api-to-work-with-venom/graphql-quick-start","70e"),exact:!0,sidebar:"buildSidebar"},{path:"/build/quick-start-on-testnet",component:f("/build/quick-start-on-testnet","68e"),exact:!0,sidebar:"buildSidebar"},{path:"/build/tools-and-resources",component:f("/build/tools-and-resources","065"),exact:!0,sidebar:"buildSidebar"},{path:"/faq/",component:f("/faq/","eb7"),exact:!0,sidebar:"faqSidebar"},{path:"/faq/integration",component:f("/faq/integration","97b"),exact:!0,sidebar:"faqSidebar"},{path:"/faq/programming",component:f("/faq/programming","d8a"),exact:!0,sidebar:"faqSidebar"},{path:"/general/balance-transfers",component:f("/general/balance-transfers","e6a"),exact:!0,sidebar:"docsSidebar"},{path:"/general/community",component:f("/general/community","ec3"),exact:!0,sidebar:"docsSidebar"},{path:"/general/developer-programm",component:f("/general/developer-programm","9c5"),exact:!0,sidebar:"docsSidebar"},{path:"/general/ecosystem",component:f("/general/ecosystem","428"),exact:!0,sidebar:"docsSidebar"},{path:"/general/presskit",component:f("/general/presskit","e0e"),exact:!0,sidebar:"docsSidebar"},{path:"/general/readme",component:f("/general/readme","11d"),exact:!0,sidebar:"docsSidebar"},{path:"/general/wallet/create-a-new-wallet-account",component:f("/general/wallet/create-a-new-wallet-account","946"),exact:!0,sidebar:"docsSidebar"},{path:"/general/wallet/creating-a-multisignature-account",component:f("/general/wallet/creating-a-multisignature-account","86e"),exact:!0,sidebar:"docsSidebar"},{path:"/general/wallet/creating-tracking-account",component:f("/general/wallet/creating-tracking-account","716"),exact:!0,sidebar:"docsSidebar"},{path:"/general/wallet/hot-to-create-a-backup-file",component:f("/general/wallet/hot-to-create-a-backup-file","200"),exact:!0,sidebar:"docsSidebar"},{path:"/general/wallet/how-to-sign-in-into-the-wallet",component:f("/general/wallet/how-to-sign-in-into-the-wallet","a67"),exact:!0,sidebar:"docsSidebar"},{path:"/general/wallet/installing-ledger-app",component:f("/general/wallet/installing-ledger-app","92f"),exact:!0,sidebar:"docsSidebar"},{path:"/general/wallet/manage-seeds-and-accounts",component:f("/general/wallet/manage-seeds-and-accounts","444"),exact:!0,sidebar:"docsSidebar"},{path:"/general/wallet/send",component:f("/general/wallet/send","025"),exact:!0,sidebar:"docsSidebar"},{path:"/general/wallet/sending-tokens-from-the-multisignature-account",component:f("/general/wallet/sending-tokens-from-the-multisignature-account","c28"),exact:!0,sidebar:"docsSidebar"},{path:"/general/wallet/the-ledger",component:f("/general/wallet/the-ledger","be9"),exact:!0,sidebar:"docsSidebar"},{path:"/general/wallet/the-main-screen",component:f("/general/wallet/the-main-screen","00b"),exact:!0,sidebar:"docsSidebar"},{path:"/general/wallet/transactions",component:f("/general/wallet/transactions","807"),exact:!0,sidebar:"docsSidebar"},{path:"/general/whats-new",component:f("/general/whats-new","044"),exact:!0,sidebar:"docsSidebar"},{path:"/learn/accounts",component:f("/learn/accounts","aad"),exact:!0,sidebar:"docsSidebar"},{path:"/learn/architecture",component:f("/learn/architecture","2a4"),exact:!0,sidebar:"docsSidebar"},{path:"/learn/consensus",component:f("/learn/consensus","7c4"),exact:!0,sidebar:"docsSidebar"},{path:"/learn/glossary",component:f("/learn/glossary","409"),exact:!0,sidebar:"docsSidebar"},{path:"/learn/messages-and-transactions",component:f("/learn/messages-and-transactions","f01"),exact:!0,sidebar:"docsSidebar"},{path:"/learn/tokens-and-assets",component:f("/learn/tokens-and-assets","4b1"),exact:!0,sidebar:"docsSidebar"},{path:"/learn/transaction-fees",component:f("/learn/transaction-fees","1fb"),exact:!0,sidebar:"docsSidebar"},{path:"/learn/tvm",component:f("/learn/tvm","350"),exact:!0,sidebar:"docsSidebar"},{path:"/maintain/network-maintainers",component:f("/maintain/network-maintainers","3a0"),exact:!0,sidebar:"docsSidebar"},{path:"/standards/LICENSE",component:f("/standards/LICENSE","5f7"),exact:!0,sidebar:"standardSidebar"},{path:"/standards/TIP/TIP-3/1",component:f("/standards/TIP/TIP-3/1","afd"),exact:!0,sidebar:"standardSidebar"},{path:"/standards/TIP/TIP-3/2",component:f("/standards/TIP/TIP-3/2","768"),exact:!0,sidebar:"standardSidebar"},{path:"/standards/TIP/TIP-3/core-description",component:f("/standards/TIP/TIP-3/core-description","e67"),exact:!0,sidebar:"standardSidebar"},{path:"/standards/TIP/TIP-4/1",component:f("/standards/TIP/TIP-4/1","e60"),exact:!0,sidebar:"standardSidebar"},{path:"/standards/TIP/TIP-4/2",component:f("/standards/TIP/TIP-4/2","7e6"),exact:!0,sidebar:"standardSidebar"},{path:"/standards/TIP/TIP-4/3",component:f("/standards/TIP/TIP-4/3","e86"),exact:!0,sidebar:"standardSidebar"},{path:"/standards/TIP/TIP-4/4",component:f("/standards/TIP/TIP-4/4","bd2"),exact:!0,sidebar:"standardSidebar"},{path:"/standards/TIP/TIP-4/5",component:f("/standards/TIP/TIP-4/5","2bb"),exact:!0,sidebar:"standardSidebar"},{path:"/standards/TIP/TIP-4/core-description",component:f("/standards/TIP/TIP-4/core-description","615"),exact:!0,sidebar:"standardSidebar"},{path:"/standards/TIP/TIP-6/1",component:f("/standards/TIP/TIP-6/1","8b7"),exact:!0,sidebar:"standardSidebar"},{path:"/standards/TIP/TIP-6/core-description",component:f("/standards/TIP/TIP-6/core-description","652"),exact:!0,sidebar:"standardSidebar"},{path:"/standards/VEP/",component:f("/standards/VEP/","b91"),exact:!0,sidebar:"standardSidebar"},{path:"/standards/VEP/vep-1",component:f("/standards/VEP/vep-1","600"),exact:!0,sidebar:"standardSidebar"},{path:"/standards/VEP/vep-1111",component:f("/standards/VEP/vep-1111","914"),exact:!0,sidebar:"standardSidebar"},{path:"/standards/VEP/vep-1155",component:f("/standards/VEP/vep-1155","af9"),exact:!0,sidebar:"standardSidebar"},{path:"/standards/VEP/vep-2981",component:f("/standards/VEP/vep-2981","67b"),exact:!0,sidebar:"standardSidebar"},{path:"/standards/VEP/vep-33",component:f("/standards/VEP/vep-33","04b"),exact:!0,sidebar:"standardSidebar"},{path:"/start/maintain/how-to-become-a-validator",component:f("/start/maintain/how-to-become-a-validator","5ca"),exact:!0,sidebar:"docsSidebar"}]},{path:"*",component:f("*")}]},8121:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,t:()=>o});var r=n(7294);const a=r.createContext(!1);function o(e){let{children:t}=e;const[n,o]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{o(!0)}),[]),r.createElement(a.Provider,{value:n},t)}},654:(e,t,n)=>{"use strict";var r=n(7294),a=n(3935),o=n(3727),i=n(405),l=n(6136);const s=[n(4313),n(984),n(2251),n(9957),n(6930)];var u=n(997),c=n(6550),d=n(8790);function f(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var p=n(7462),m=n(1514),h=n(9962),g=n(9524),b=n(107),v=n(5463),y=n(626),w=n(8181),k=n(246),E=n(3647);function S(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,h.Z)(),n=(0,y.l)();return r.createElement(m.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:a}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:a})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function x(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,h.Z)(),a=function(){const{siteConfig:{url:e}}=(0,h.Z)(),{pathname:t}=(0,c.TH)();return e+(0,g.Z)(t)}(),o=t?`${n}${t}`:a;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:o}),r.createElement("link",{rel:"canonical",href:o}))}function T(){const{i18n:{currentLocale:e}}=(0,h.Z)(),{metadata:t,image:n}=(0,b.L)();return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.h})),n&&r.createElement(v.d,{image:n}),r.createElement(x,null),r.createElement(S,null),r.createElement(E.Z,{tag:k.HX,locale:e}),r.createElement(m.Z,null,t.map(((e,t)=>r.createElement("meta",(0,p.Z)({key:t},e))))))}const _=new Map;function C(e){if(_.has(e.pathname))return{...e,pathname:_.get(e.pathname)};if((0,d.f)(u.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return _.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return _.set(e.pathname,t),{...e,pathname:t}}var P=n(8121),I=n(694);function A(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{var r;const a=(null==(r=t.default)?void 0:r[e])??t[e];return null==a?void 0:a(...n)}));return()=>a.forEach((e=>null==e?void 0:e()))}const L=function(e){let{children:t,location:n,previousLocation:a}=e;return(0,r.useLayoutEffect)((()=>{a!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,a=t.hash===n.hash,o=t.search===n.search;if(r&&a&&!o)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);null==t||t.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:a}),A("onRouteDidUpdate",{previousLocation:a,location:n}))}),[a,n]),t};function N(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(u.Z,e))).flat();return Promise.all(t.map((e=>null==e.route.component.preload?void 0:e.route.component.preload())))}class O extends r.Component{constructor(e){super(e),this.previousLocation=void 0,this.routeUpdateCleanupCb=void 0,this.previousLocation=null,this.routeUpdateCleanupCb=l.Z.canUseDOM?A("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=A("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),N(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(L,{previousLocation:this.previousLocation,location:t},r.createElement(c.AW,{location:t,render:()=>e}))}}const R=O,M="docusaurus-base-url-issue-banner-container",D="docusaurus-base-url-issue-banner-suggestion-container",F="__DOCUSAURUS_INSERT_BASEURL_BANNER";function B(e){return`\nwindow['${F}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${F}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${M}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

\n

We suggest trying baseUrl =

\n
\n`}(e)).replace(/{window[F]=!1}),[]),r.createElement(r.Fragment,null,!l.Z.canUseDOM&&r.createElement(m.Z,null,r.createElement("script",null,B(e))),r.createElement("div",{id:M}))}function U(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,h.Z)(),{pathname:n}=(0,c.TH)();return t&&n===e?r.createElement($,null):null}function z(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:a,localeConfigs:o}}=(0,h.Z)(),i=(0,g.Z)(e),{htmlLang:l,direction:s}=o[a];return r.createElement(m.Z,null,r.createElement("html",{lang:l,dir:s}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&r.createElement("link",{rel:"icon",href:i}))}var j=n(3256);function Z(){const e=(0,d.H)(u.Z),t=(0,c.TH)();return r.createElement(j.Z,null,r.createElement(I.M,null,r.createElement(P.t,null,r.createElement(f,null,r.createElement(z,null),r.createElement(T,null),r.createElement(U,null),r.createElement(R,{location:C(t)},e)))))}var V=n(6887);const H=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{var r;if("undefined"==typeof document)return void n();const a=document.createElement("link");a.setAttribute("rel","prefetch"),a.setAttribute("href",e),a.onload=()=>t(),a.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??(null==(r=document.getElementsByName("script")[0])?void 0:r.parentNode);null==o||o.appendChild(a)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var q=n(5304);const W=new Set,G=new Set,K=()=>{var e,t;return(null==(e=navigator.connection)?void 0:e.effectiveType.includes("2g"))||(null==(t=navigator.connection)?void 0:t.saveData)},Y={prefetch(e){if(!(e=>!K()&&!G.has(e)&&!W.has(e))(e))return!1;W.add(e);const t=(0,d.f)(u.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(V).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,q.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?H(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!K()&&!G.has(e))(e)&&(G.add(e),N(e))},Q=Object.freeze(Y);if(l.Z.canUseDOM){window.docusaurus=Q;const e=a.hydrate;N(window.location.pathname).then((()=>{e(r.createElement(i.B6,null,r.createElement(o.VK,null,r.createElement(Z,null))),document.getElementById("__docusaurus"))}))}},694:(e,t,n)=>{"use strict";n.d(t,{_:()=>c,M:()=>d});var r=n(7294),a=n(6809);const o=JSON.parse('{"docusaurus-plugin-google-gtag":{"default":{"trackingID":["G-89NZVH357M"],"anonymizeIP":true,"id":"default"}},"veps-data-generator":{"default":{"veps":[{"VEP":1,"author":"VenomBlockchain ","status":"Review","type":"Informational","created":"2023-02-28","title":"VEP-1: VEP Purpose and Guidelines"},{"VEP":33,"author":"EverDues ","status":"Review","type":"Contract","created":"16.05.2023","requires":"TIP-3, TIP-3.1, TIP-3.2, TIP-6","title":"VEP-33: Allowance Token Interface"},{"VEP":1111,"author":"Danil Naumov ","status":"Draft","type":"Contract","created":"2023-07-20","title":"VEP-1111: Contract indexation"},{"VEP":1155,"author":"Evgeny Shatalov , Aleksei Kolchanov , Aleksandr Khramtsov ","status":"Review","type":"Contract","created":"2023-03-08","requires":"TIP-3, TIP-4.1, TIP-4.2, TIP-4.3, TIP-6","title":"VEP-1155: Multi-Token"},{"VEP":2981,"author":"Evgeny Shatalov , Aleksei Kolchanov ","status":"Review","type":"Contract","created":"2023-03-08","requires":"TIP-6","title":"VEP-2981: NFT Royalty"}]}},"docusaurus-plugin-content-docs":{"default":{"path":"/","versions":[{"name":"current","label":"Next","isLast":true,"path":"/","mainDocId":"start/general/welcome-to-venom","docs":[{"id":"build/development-guides/comparing-of-ethereum-vs-venom-architectures","path":"/build/development-guides/comparing-of-ethereum-vs-venom-architectures","sidebar":"buildSidebar"},{"id":"build/development-guides/developing-of-simple-voting-system/venom-in-action/extend-our-voting-system-with-backend","path":"/build/development-guides/developing-of-simple-voting-system/venom-in-action/extend-our-voting-system-with-backend","sidebar":"buildSidebar"},{"id":"build/development-guides/developing-of-simple-voting-system/venom-in-action/voting-system-contracts","path":"/build/development-guides/developing-of-simple-voting-system/venom-in-action/voting-system-contracts","sidebar":"buildSidebar"},{"id":"build/development-guides/developing-of-simple-voting-system/venom-in-action/ways-of-code-enhancing","path":"/build/development-guides/developing-of-simple-voting-system/venom-in-action/ways-of-code-enhancing","sidebar":"buildSidebar"},{"id":"build/development-guides/developing-of-simple-voting-system/voting-system-basics","path":"/build/development-guides/developing-of-simple-voting-system/voting-system-basics","sidebar":"buildSidebar"},{"id":"build/development-guides/how-to-create-your-own-fungible-tip-3-token/fungible-tokens-in-venom-network","path":"/build/development-guides/how-to-create-your-own-fungible-tip-3-token/fungible-tokens-in-venom-network","sidebar":"buildSidebar"},{"id":"build/development-guides/how-to-create-your-own-fungible-tip-3-token/quick-start-developing-with-tip-3","path":"/build/development-guides/how-to-create-your-own-fungible-tip-3-token/quick-start-developing-with-tip-3","sidebar":"buildSidebar"},{"id":"build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/extend-our-tokensale-with-frontend","path":"/build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/extend-our-tokensale-with-frontend","sidebar":"buildSidebar"},{"id":"build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/going-global","path":"/build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/going-global","sidebar":"buildSidebar"},{"id":"build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/simple-tokensale","path":"/build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/simple-tokensale","sidebar":"buildSidebar"},{"id":"build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/ways-of-code-enhancing","path":"/build/development-guides/how-to-create-your-own-fungible-tip-3-token/venom-in-action/ways-of-code-enhancing","sidebar":"buildSidebar"},{"id":"build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/non-fungible-tokens-in-venom-network","path":"/build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/non-fungible-tokens-in-venom-network","sidebar":"buildSidebar"},{"id":"build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/quick-start-developing-with-tip-4","path":"/build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/quick-start-developing-with-tip-4","sidebar":"buildSidebar"},{"id":"build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/frontend-for-nft-auction","path":"/build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/frontend-for-nft-auction","sidebar":"buildSidebar"},{"id":"build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/frontend-for-nft-collection","path":"/build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/frontend-for-nft-collection","sidebar":"buildSidebar"},{"id":"build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/simple-nft-auction","path":"/build/development-guides/how-to-create-your-own-non-fungible-tip-4-token/venom-in-action/simple-nft-auction","sidebar":"buildSidebar"},{"id":"build/development-guides/readme","path":"/build/development-guides/","sidebar":"buildSidebar"},{"id":"build/development-guides/setting-up-the-venom-smart-contract-development-environment","path":"/build/development-guides/setting-up-the-venom-smart-contract-development-environment","sidebar":"buildSidebar"},{"id":"build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/monitoring-transactions","path":"/build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/monitoring-transactions","sidebar":"buildSidebar"},{"id":"build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/readme","path":"/build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/","sidebar":"buildSidebar"},{"id":"build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/sending-transactions","path":"/build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/sending-transactions","sidebar":"buildSidebar"},{"id":"build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/setting-up-wallet-account","path":"/build/development-guides/using-ever-sdk-and-devtools-to-work-with-venom/setting-up-wallet-account","sidebar":"buildSidebar"},{"id":"build/development-guides/using-evercloud-graphql-api-to-work-with-venom/graphql-api-guides","path":"/build/development-guides/using-evercloud-graphql-api-to-work-with-venom/graphql-api-guides","sidebar":"buildSidebar"},{"id":"build/development-guides/using-evercloud-graphql-api-to-work-with-venom/graphql-quick-start","path":"/build/development-guides/using-evercloud-graphql-api-to-work-with-venom/graphql-quick-start","sidebar":"buildSidebar"},{"id":"build/development-guides/using-evercloud-graphql-api-to-work-with-venom/readme","path":"/build/development-guides/using-evercloud-graphql-api-to-work-with-venom/","sidebar":"buildSidebar"},{"id":"build/quick-start-on-testnet","path":"/build/quick-start-on-testnet","sidebar":"buildSidebar"},{"id":"build/tools-and-resources","path":"/build/tools-and-resources","sidebar":"buildSidebar"},{"id":"faq/integration","path":"/faq/integration","sidebar":"faqSidebar"},{"id":"faq/programming","path":"/faq/programming","sidebar":"faqSidebar"},{"id":"faq/readme","path":"/faq/","sidebar":"faqSidebar"},{"id":"standards/LICENSE","path":"/standards/LICENSE","sidebar":"standardSidebar"},{"id":"standards/TIP/TIP-3/1","path":"/standards/TIP/TIP-3/1","sidebar":"standardSidebar"},{"id":"standards/TIP/TIP-3/2","path":"/standards/TIP/TIP-3/2","sidebar":"standardSidebar"},{"id":"standards/TIP/TIP-3/core-description","path":"/standards/TIP/TIP-3/core-description","sidebar":"standardSidebar"},{"id":"standards/TIP/TIP-4/1","path":"/standards/TIP/TIP-4/1","sidebar":"standardSidebar"},{"id":"standards/TIP/TIP-4/2","path":"/standards/TIP/TIP-4/2","sidebar":"standardSidebar"},{"id":"standards/TIP/TIP-4/3","path":"/standards/TIP/TIP-4/3","sidebar":"standardSidebar"},{"id":"standards/TIP/TIP-4/4","path":"/standards/TIP/TIP-4/4","sidebar":"standardSidebar"},{"id":"standards/TIP/TIP-4/5","path":"/standards/TIP/TIP-4/5","sidebar":"standardSidebar"},{"id":"standards/TIP/TIP-4/core-description","path":"/standards/TIP/TIP-4/core-description","sidebar":"standardSidebar"},{"id":"standards/TIP/TIP-6/1","path":"/standards/TIP/TIP-6/1","sidebar":"standardSidebar"},{"id":"standards/TIP/TIP-6/core-description","path":"/standards/TIP/TIP-6/core-description","sidebar":"standardSidebar"},{"id":"standards/VEP/readme","path":"/standards/VEP/","sidebar":"standardSidebar"},{"id":"standards/VEP/vep-1","path":"/standards/VEP/vep-1","sidebar":"standardSidebar"},{"id":"standards/VEP/vep-1111","path":"/standards/VEP/vep-1111","sidebar":"standardSidebar"},{"id":"standards/VEP/vep-1155","path":"/standards/VEP/vep-1155","sidebar":"standardSidebar"},{"id":"standards/VEP/vep-2981","path":"/standards/VEP/vep-2981","sidebar":"standardSidebar"},{"id":"standards/VEP/vep-33","path":"/standards/VEP/vep-33","sidebar":"standardSidebar"},{"id":"start/general/balance-transfers","path":"/general/balance-transfers","sidebar":"docsSidebar"},{"id":"start/general/community","path":"/general/community","sidebar":"docsSidebar"},{"id":"start/general/developer-programm","path":"/general/developer-programm","sidebar":"docsSidebar"},{"id":"start/general/ecosystem","path":"/general/ecosystem","sidebar":"docsSidebar"},{"id":"start/general/presskit","path":"/general/presskit","sidebar":"docsSidebar"},{"id":"start/general/wallet/creating-new-wallet","path":"/general/wallet/create-a-new-wallet-account","sidebar":"docsSidebar"},{"id":"start/general/wallet/how-to-create-a-backup-file","path":"/general/wallet/hot-to-create-a-backup-file","sidebar":"docsSidebar"},{"id":"start/general/wallet/how-to-sign-in-into-the-wallet","path":"/general/wallet/how-to-sign-in-into-the-wallet","sidebar":"docsSidebar"},{"id":"start/general/wallet/manage-seeds-and-accounts","path":"/general/wallet/manage-seeds-and-accounts","sidebar":"docsSidebar"},{"id":"start/general/wallet/multisignature-account/creating-a-multisignature-account","path":"/general/wallet/creating-a-multisignature-account","sidebar":"docsSidebar"},{"id":"start/general/wallet/multisignature-account/creating-tracking-account","path":"/general/wallet/creating-tracking-account","sidebar":"docsSidebar"},{"id":"start/general/wallet/multisignature-account/sending-tokens-from-the-multisignature-account","path":"/general/wallet/sending-tokens-from-the-multisignature-account","sidebar":"docsSidebar"},{"id":"start/general/wallet/the-ledger/installing-everscale-on-ledger-live","path":"/general/wallet/installing-ledger-app","sidebar":"docsSidebar"},{"id":"start/general/wallet/the-ledger/the-ledger","path":"/general/wallet/the-ledger","sidebar":"docsSidebar"},{"id":"start/general/wallet/the-main/send","path":"/general/wallet/send","sidebar":"docsSidebar"},{"id":"start/general/wallet/the-main/the-main","path":"/general/wallet/the-main-screen","sidebar":"docsSidebar"},{"id":"start/general/wallet/the-main/transactions","path":"/general/wallet/transactions","sidebar":"docsSidebar"},{"id":"start/general/welcome-to-venom","path":"/general/readme","sidebar":"docsSidebar"},{"id":"start/general/whats-new","path":"/general/whats-new","sidebar":"docsSidebar"},{"id":"start/learn/accounts","path":"/learn/accounts","sidebar":"docsSidebar"},{"id":"start/learn/architecture","path":"/learn/architecture","sidebar":"docsSidebar"},{"id":"start/learn/consensus","path":"/learn/consensus","sidebar":"docsSidebar"},{"id":"start/learn/gas-and-fees","path":"/learn/transaction-fees","sidebar":"docsSidebar"},{"id":"start/learn/glossary","path":"/learn/glossary","sidebar":"docsSidebar"},{"id":"start/learn/messages-and-transactions","path":"/learn/messages-and-transactions","sidebar":"docsSidebar"},{"id":"start/learn/threaded-virtual-machine","path":"/learn/tvm","sidebar":"docsSidebar"},{"id":"start/learn/tokens-and-assets","path":"/learn/tokens-and-assets","sidebar":"docsSidebar"},{"id":"start/maintain/how-to-become-a-validator","path":"/start/maintain/how-to-become-a-validator","sidebar":"docsSidebar"},{"id":"start/maintain/network-maintainers","path":"/maintain/network-maintainers","sidebar":"docsSidebar"}],"draftIds":[],"sidebars":{"docsSidebar":{"link":{"path":"/general/readme","label":"Getting Started"}},"buildSidebar":{"link":{"path":"/build/quick-start-on-testnet","label":"Quick start developing on Venom testnet"}},"faqSidebar":{"link":{"path":"/faq/","label":"faq/readme"}},"standardSidebar":{"link":{"path":"/standards/VEP/","label":"Venom Enhance Proposals"}}}}],"breadcrumbs":true}},"awesome-list-parser":{"default":{"parsedList":"

Programming

\\n
    \\n
  • Locklift - Hardhat-like development environment.
  • \\n
  • Inpage provider - Web3-like interface for TVM blockchains.
  • \\n
  • Standalone client - Standalone client for TVM blockchains to use with inpage provider.
  • \\n
  • Venom Connect - Easy integration of Venom Wallet into dApps. (inspired by web3modal).
  • \\n
  • Ever SDK - Rust Client Library (core) for DApp development in TVM blockchains. It also has bindings for JS, Python, Go, Java and other popular languages.
  • \\n
  • nekoton - Rust SDK for Venom network.
  • \\n
  • ton-indexer - Simple and reliable indexer node of Venom Blockchain.
  • \\n
  • venom-scaffold - Yeoman generator to scaffold ready-to-use projects for smart contract development on TVM-based blockchains.
  • \\n
\\n

Code

\\n\\n

Wallets

\\n\\n

Blockchain Utilities

\\n
    \\n
  • VenomScan - Venom Blockchain Explorer.
  • \\n
  • VenomFaucet - Faucet for Venom Blockchain testnet and mainnet networks.
  • \\n
  • Venom Tools - Set of tools to interact with Venom smart contracts from browser.
  • \\n
\\n"}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var l=n(7529);const s=JSON.parse('{"docusaurusVersion":"2.4.0","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.0"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.4.0"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.0"},"docusaurus-plugin-google-gtag":{"type":"package","name":"@docusaurus/plugin-google-gtag","version":"2.4.0"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.0"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.0"},"docusaurus-plugin-client-redirects":{"type":"package","name":"@docusaurus/plugin-client-redirects","version":"2.4.0"},"docusaurus-plugin-ideal-image":{"type":"package","name":"@docusaurus/plugin-ideal-image","version":"2.4.0"},"my-gtm-docusaurus-plugin":{"type":"local"},"veps-data-generator":{"type":"local"},"awesome-list-parser":{"type":"local"},"docusaurus-theme-search-typesense":{"type":"package","name":"docusaurus-theme-search-typesense","version":"0.11.0"}}}'),u={siteConfig:a.default,siteMetadata:s,globalData:o,i18n:i,codeTranslations:l},c=r.createContext(u);function d(e){let{children:t}=e;return r.createElement(c.Provider,{value:u},t)}},3256:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),a=n(6136),o=n(1514),i=n(3905),l=n(6945);function s(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},r.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),r.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),r.createElement(u,{error:t}))}function u(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function c(e){let{error:t,tryAgain:n}=e;return r.createElement(f,{fallback:()=>r.createElement(s,{error:t,tryAgain:n})},r.createElement(o.Z,null,r.createElement("title",null,"Page Error")),r.createElement(l.Z,null,r.createElement(s,{error:t,tryAgain:n})))}const d=e=>r.createElement(c,e);class f extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??d)(e)}return e??null}}},6136:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},1514:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(405);function o(e){return r.createElement(a.ql,e)}},3699:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7462),a=n(7294),o=n(3727),i=n(3905),l=n(9962),s=n(2735),u=n(6136);const c=a.createContext({collectLink:()=>{}});var d=n(9524);function f(e,t){var n;let{isNavLink:f,to:p,href:m,activeClassName:h,isActive:g,"data-noBrokenLinkCheck":b,autoAddBaseUrl:v=!0,...y}=e;const{siteConfig:{trailingSlash:w,baseUrl:k}}=(0,l.Z)(),{withBaseUrl:E}=(0,d.C)(),S=(0,a.useContext)(c),x=(0,a.useRef)(null);(0,a.useImperativeHandle)(t,(()=>x.current));const T=p||m;const _=(0,s.Z)(T),C=null==T?void 0:T.replace("pathname://","");let P=void 0!==C?(I=C,v&&(e=>e.startsWith("/"))(I)?E(I):I):void 0;var I;P&&_&&(P=(0,i.applyTrailingSlash)(P,{trailingSlash:w,baseUrl:k}));const A=(0,a.useRef)(!1),L=f?o.OL:o.rU,N=u.Z.canUseIntersectionObserver,O=(0,a.useRef)(),R=()=>{A.current||null==P||(window.docusaurus.preload(P),A.current=!0)};(0,a.useEffect)((()=>(!N&&_&&null!=P&&window.docusaurus.prefetch(P),()=>{N&&O.current&&O.current.disconnect()})),[O,P,N,_]);const M=(null==(n=P)?void 0:n.startsWith("#"))??!1,D=!P||!_||M;return D||b||S.collectLink(P),D?a.createElement("a",(0,r.Z)({ref:x,href:P},T&&!_&&{target:"_blank",rel:"noopener noreferrer"},y)):a.createElement(L,(0,r.Z)({},y,{onMouseEnter:R,onTouchStart:R,innerRef:e=>{x.current=e,N&&e&&_&&(O.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(O.current.unobserve(e),O.current.disconnect(),null!=P&&window.docusaurus.prefetch(P))}))})),O.current.observe(e))},to:P},f&&{isActive:g,activeClassName:h}))}const p=a.forwardRef(f)},7325:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s,I:()=>l});var r=n(7294);function a(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=null==t?void 0:t[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var o=n(7529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return o[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return a(i({message:n,id:r}),t)}function s(e){let{children:t,id:n,values:o}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const l=i({message:t,id:n});return r.createElement(r.Fragment,null,a(l,o))}},6875:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},2735:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>a,b:()=>r})},9524:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>l});var r=n(7294),a=n(9962),o=n(2735);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,a.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:a=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,o.b)(n))return n;if(a)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+l:l}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function l(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},9962:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(694);function o(){return(0,r.useContext)(a._)}},1610:(e,t,n)=>{"use strict";n.d(t,{OD:()=>o,eZ:()=>i});var r=n(9962),a=n(6875);function o(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,r.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}function i(e,t,n){void 0===t&&(t=a.m),void 0===n&&(n={});const r=o(e),i=null==r?void 0:r[t];if(!i&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return i}},1048:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(8121);function o(){return(0,r.useContext)(a._)}},5304:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});function r(e){const t={};return function e(n,r){Object.entries(n).forEach((n=>{let[a,o]=n;const i=r?`${r}.${a}`:a;var l;"object"==typeof(l=o)&&l&&Object.keys(l).length>0?e(o,i):t[i]=o}))}(e),t}},9656:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,z:()=>o});var r=n(7294);const a=r.createContext(null);function o(e){let{children:t,value:n}=e;const o=r.useContext(a),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...null==n?void 0:n.data};return{plugin:t.plugin,data:r}}({parent:o,value:n})),[o,n]);return r.createElement(a.Provider,{value:i},t)}},868:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>h,gA:()=>d,WS:()=>f,_r:()=>u,Jo:()=>g,zh:()=>c,yW:()=>m,gB:()=>p});var r=n(6550),a=n(1610);const o=e=>e.versions.find((e=>e.isLast));function i(e,t){const n=o(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}function l(e,t){const n=i(e,t),a=null==n?void 0:n.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:a,alternateDocVersions:a?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(a.id):{}}}const s={},u=()=>(0,a.OD)("docusaurus-plugin-content-docs")??s,c=e=>(0,a.eZ)("docusaurus-plugin-content-docs",e,{failfast:!0});function d(e){void 0===e&&(e={});const t=u(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const a=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return o}(t,n,e)}function f(e){void 0===e&&(e={});const t=d(e),{pathname:n}=(0,r.TH)();if(!t)return;return{activePlugin:t,activeVersion:i(t.pluginData,n)}}function p(e){return c(e).versions}function m(e){const t=c(e);return o(t)}function h(e){const t=c(e),{pathname:n}=(0,r.TH)();return l(t,n)}function g(e){const t=c(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=o(e);return{latestDocSuggestion:l(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},4313:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={onRouteDidUpdate(e){let{location:t,previousLocation:n}=e;!n||t.pathname===n.pathname&&t.search===n.search&&t.hash===n.hash||setTimeout((()=>{window.gtag("event","page_view",{page_title:document.title,page_location:window.location.href,page_path:t.pathname+t.search+t.hash})}))}}},9957:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(4865),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},2251:(e,t,n)=>{"use strict";n.r(t);var r=n(7410),a=n(6809);!function(e){const{themeConfig:{prism:t}}=a.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(772)(`./prism-${e}`)})),delete globalThis.Prism}(r.Z)},4082:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294);const a="iconExternalLink_nPIU";function o(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:a},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},6945:(e,t,n)=>{"use strict";n.d(t,{Z:()=>It});var r=n(7294),a=n(6010),o=n(3256),i=n(5463),l=n(7462),s=n(6550),u=n(7325),c=n(3266);const d="docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){const e=(0,r.useRef)(null),{action:t}=(0,s.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&f(t)}),[]);return(0,c.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,onClick:n}}const m=(0,u.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function h(e){const t=e.children??m,{containerRef:n,onClick:a}=p();return r.createElement("div",{ref:n,role:"region","aria-label":m},r.createElement("a",(0,l.Z)({},e,{href:`#${d}`,onClick:a}),t))}var g=n(3702),b=n(8181);const v="skipToContent_fXgn";function y(){return r.createElement(h,{className:v})}var w=n(107),k=n(5830);function E(e){let{width:t=21,height:n=21,color:a="currentColor",strokeWidth:o=1.2,className:i,...s}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 15 15",width:t,height:n},s),r.createElement("g",{stroke:a,strokeWidth:o},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const S="closeButton_CVFx";function x(e){return r.createElement("button",(0,l.Z)({type:"button","aria-label":(0,u.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,a.Z)("clean-btn close",S,e.className)}),r.createElement(E,{width:14,height:14,strokeWidth:3.1}))}const T="content_knG7";function _(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return r.createElement("div",(0,l.Z)({},e,{className:(0,a.Z)(T,e.className),dangerouslySetInnerHTML:{__html:n}}))}const C="announcementBar_mb4j",P="announcementBarPlaceholder_vyr4",I="announcementBarClose_gvF7",A="announcementBarContent_xLdY";function L(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,k.nT)();if(!t)return null;const{backgroundColor:a,textColor:o,isCloseable:i}=e;return r.createElement("div",{className:C,style:{backgroundColor:a,color:o},role:"banner"},i&&r.createElement("div",{className:P}),r.createElement(_,{className:A}),i&&r.createElement(x,{onClick:n,className:I}))}var N=n(2600),O=n(2957);var R=n(3768),M=n(3086);const D=r.createContext(null);function F(e){let{children:t}=e;const n=function(){const e=(0,N.e)(),t=(0,M.HY)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,i=(0,R.D9)(o);return(0,r.useEffect)((()=>{o&&!i&&a(!0)}),[o,i]),(0,r.useEffect)((()=>{o?e.shown||a(!0):a(!1)}),[e.shown,o]),(0,r.useMemo)((()=>[n,a]),[n])}();return r.createElement(D.Provider,{value:n},t)}function B(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function $(){const e=(0,r.useContext)(D);if(!e)throw new R.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,M.HY)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:B(o)})),[a,o,t])}function U(e){let{header:t,primaryMenu:n,secondaryMenu:o}=e;const{shown:i}=$();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,a.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},o)))}var z=n(9200),j=n(1048);function Z(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function V(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const H={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function q(e){let{className:t,buttonClassName:n,value:o,onChange:i}=e;const l=(0,j.Z)(),s=(0,u.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===o?(0,u.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,u.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,a.Z)(H.toggle,t)},r.createElement("button",{className:(0,a.Z)("clean-btn",H.toggleButton,!l&&H.toggleButtonDisabled,n),type:"button",onClick:()=>i("dark"===o?"light":"dark"),disabled:!l,title:s,"aria-label":s,"aria-live":"polite"},r.createElement(Z,{className:(0,a.Z)(H.toggleIcon,H.lightToggleIcon)}),r.createElement(V,{className:(0,a.Z)(H.toggleIcon,H.darkToggleIcon)})))}const W=r.memo(q),G="darkNavbarColorModeToggle_X3D1";function K(e){let{className:t}=e;const n=(0,w.L)().navbar.style,a=(0,w.L)().colorMode.disableSwitch,{colorMode:o,setColorMode:i}=(0,z.I)();return a?null:r.createElement(W,{className:t,buttonClassName:"dark"===n?G:void 0,value:o,onChange:i})}var Y=n(6811);function Q(){return r.createElement(Y.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function X(){const e=(0,N.e)();return r.createElement("button",{type:"button","aria-label":(0,u.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},r.createElement(E,{color:"var(--ifm-color-emphasis-600)"}))}function J(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(Q,null),r.createElement(K,{className:"margin-right--md"}),r.createElement(X,null))}var ee=n(3699),te=n(9524),ne=n(2735),re=n(1500),ae=n(4082);function oe(e){let{activeBasePath:t,activeBaseRegex:n,to:a,href:o,label:i,html:s,isDropdownLink:u,prependBaseUrlToHref:c,...d}=e;const f=(0,te.Z)(a),p=(0,te.Z)(t),m=(0,te.Z)(o,{forcePrependBaseUrl:!0}),h=i&&o&&!(0,ne.Z)(o),g=s?{dangerouslySetInnerHTML:{__html:s}}:{children:r.createElement(r.Fragment,null,i,h&&r.createElement(ae.Z,u&&{width:12,height:12}))};return o?r.createElement(ee.Z,(0,l.Z)({href:c?m:o},d,g)):r.createElement(ee.Z,(0,l.Z)({to:f,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?(0,re.F)(n,t.pathname):t.pathname.startsWith(p)},d,g))}function ie(e){let{className:t,isDropdownItem:n=!1,...o}=e;const i=r.createElement(oe,(0,l.Z)({className:(0,a.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},o));return n?r.createElement("li",null,i):i}function le(e){let{className:t,isDropdownItem:n,...o}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(oe,(0,l.Z)({className:(0,a.Z)("menu__link",t)},o)))}function se(e){let{mobile:t=!1,position:n,...a}=e;const o=t?le:ie;return r.createElement(o,(0,l.Z)({},a,{activeClassName:a.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var ue=n(4639),ce=n(9003),de=n(9962);function fe(e,t){return e.some((e=>function(e,t){return!!(0,ce.Mg)(e.to,t)||!!(0,re.F)(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function pe(e){let{items:t,position:n,className:o,onClick:i,...s}=e;const u=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{u.current&&!u.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[u]),r.createElement("div",{ref:u,className:(0,a.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c})},r.createElement(oe,(0,l.Z)({"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,a.Z)("navbar__link",o)},s,{onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))}}),s.children??s.label),r.createElement("ul",{className:"dropdown__menu"},t.map(((e,t)=>r.createElement(je,(0,l.Z)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))))))}function me(e){let{items:t,className:n,position:o,onClick:i,...u}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,de.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=fe(t,c),{collapsed:f,toggleCollapsed:p,setCollapsed:m}=(0,ue.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[c,d,m]),r.createElement("li",{className:(0,a.Z)("menu__list-item",{"menu__list-item--collapsed":f})},r.createElement(oe,(0,l.Z)({role:"button",className:(0,a.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},u,{onClick:e=>{e.preventDefault(),p()}}),u.children??u.label),r.createElement(ue.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:f},t.map(((e,t)=>r.createElement(je,(0,l.Z)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function he(e){let{mobile:t=!1,...n}=e;const a=t?me:pe;return r.createElement(a,n)}var ge=n(626);function be(e){let{width:t=20,height:n=20,...a}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},a),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const ve="iconLanguage_nlXk";var ye=n(3935),we=n(7795);var ke=n(6854),Ee=n(5987);function Se(){return r.createElement("svg",{width:"15",height:"15",className:"DocSearch-Control-Key-Icon"},r.createElement("path",{d:"M4.505 4.496h2M5.505 5.496v5M8.216 4.496l.055 5.993M10 7.5c.333.333.5.667.5 1v2M12.326 4.5v5.996M8.384 4.496c1.674 0 2.116 0 2.116 1.5s-.442 1.5-2.116 1.5M3.205 9.303c-.09.448-.277 1.21-1.241 1.203C1 10.5.5 9.513.5 8V7c0-1.57.5-2.5 1.464-2.494.964.006 1.134.598 1.24 1.342M12.553 10.5h1.953",strokeWidth:"1.2",stroke:"currentColor",fill:"none",strokeLinecap:"square"}))}var xe=n(6963),Te=["translations"],_e="Ctrl";var Ce=r.forwardRef((function(e,t){var n=e.translations,a=void 0===n?{}:n,o=(0,Ee.Z)(e,Te),i=a.buttonText,s=void 0===i?"Search":i,u=a.buttonAriaLabel,c=void 0===u?"Search":u,d=(0,r.useState)(null),f=(0,ke.Z)(d,2),p=f[0],m=f[1];return(0,r.useEffect)((function(){"undefined"!=typeof navigator&&(/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?m("\u2318"):m(_e))}),[]),r.createElement("button",(0,l.Z)({type:"button",className:"DocSearch DocSearch-Button","aria-label":c},o,{ref:t}),r.createElement("span",{className:"DocSearch-Button-Container"},r.createElement(xe.W,null),r.createElement("span",{className:"DocSearch-Button-Placeholder"},s)),r.createElement("span",{className:"DocSearch-Button-Keys"},null!==p&&r.createElement(r.Fragment,null,r.createElement("kbd",{className:"DocSearch-Button-Key"},p===_e?r.createElement(Se,null):p),r.createElement("kbd",{className:"DocSearch-Button-Key"},"K"))))})),Pe=n(246);const Ie={button:{buttonText:(0,u.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"}),buttonAriaLabel:(0,u.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"})},modal:{searchBox:{resetButtonTitle:(0,u.I)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),resetButtonAriaLabel:(0,u.I)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),cancelButtonText:(0,u.I)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"}),cancelButtonAriaLabel:(0,u.I)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"})},startScreen:{recentSearchesTitle:(0,u.I)({id:"theme.SearchModal.startScreen.recentSearchesTitle",message:"Recent",description:"The title for recent searches"}),noRecentSearchesText:(0,u.I)({id:"theme.SearchModal.startScreen.noRecentSearchesText",message:"No recent searches",description:"The text when no recent searches"}),saveRecentSearchButtonTitle:(0,u.I)({id:"theme.SearchModal.startScreen.saveRecentSearchButtonTitle",message:"Save this search",description:"The label for save recent search button"}),removeRecentSearchButtonTitle:(0,u.I)({id:"theme.SearchModal.startScreen.removeRecentSearchButtonTitle",message:"Remove this search from history",description:"The label for remove recent search button"}),favoriteSearchesTitle:(0,u.I)({id:"theme.SearchModal.startScreen.favoriteSearchesTitle",message:"Favorite",description:"The title for favorite searches"}),removeFavoriteSearchButtonTitle:(0,u.I)({id:"theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle",message:"Remove this search from favorites",description:"The label for remove favorite search button"})},errorScreen:{titleText:(0,u.I)({id:"theme.SearchModal.errorScreen.titleText",message:"Unable to fetch results",description:"The title for error screen of search modal"}),helpText:(0,u.I)({id:"theme.SearchModal.errorScreen.helpText",message:"You might want to check your network connection.",description:"The help text for error screen of search modal"})},footer:{selectText:(0,u.I)({id:"theme.SearchModal.footer.selectText",message:"to select",description:"The explanatory text of the action for the enter key"}),selectKeyAriaLabel:(0,u.I)({id:"theme.SearchModal.footer.selectKeyAriaLabel",message:"Enter key",description:"The ARIA label for the Enter key button that makes the selection"}),navigateText:(0,u.I)({id:"theme.SearchModal.footer.navigateText",message:"to navigate",description:"The explanatory text of the action for the Arrow up and Arrow down key"}),navigateUpKeyAriaLabel:(0,u.I)({id:"theme.SearchModal.footer.navigateUpKeyAriaLabel",message:"Arrow up",description:"The ARIA label for the Arrow up key button that makes the navigation"}),navigateDownKeyAriaLabel:(0,u.I)({id:"theme.SearchModal.footer.navigateDownKeyAriaLabel",message:"Arrow down",description:"The ARIA label for the Arrow down key button that makes the navigation"}),closeText:(0,u.I)({id:"theme.SearchModal.footer.closeText",message:"to close",description:"The explanatory text of the action for Escape key"}),closeKeyAriaLabel:(0,u.I)({id:"theme.SearchModal.footer.closeKeyAriaLabel",message:"Escape key",description:"The ARIA label for the Escape key button that close the modal"}),searchByText:(0,u.I)({id:"theme.SearchModal.footer.searchByText",message:"Search by",description:"The text explain that the search is making by Algolia"})},noResultsScreen:{noResultsText:(0,u.I)({id:"theme.SearchModal.noResultsScreen.noResultsText",message:"No results for",description:"The text explains that there are no results for the following search"}),suggestedQueryText:(0,u.I)({id:"theme.SearchModal.noResultsScreen.suggestedQueryText",message:"Try searching for",description:"The text for the suggested query when no results are found for the following search"}),reportMissingResultsText:(0,u.I)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsText",message:"Believe this query should return results?",description:"The text for the question where the user thinks there are missing results"}),reportMissingResultsLinkText:(0,u.I)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsLinkText",message:"Let us know.",description:"The text for the link to report missing results"})}},placeholder:(0,u.I)({id:"theme.SearchModal.placeholder",message:"Search docs",description:"The placeholder of the input of the DocSearch pop-up modal"})};let Ae=null;function Le(e){let{hit:t,children:n}=e;return r.createElement(ee.Z,{to:t.url},n)}function Ne(e){let{state:t,onClose:n}=e;const{generateSearchPageLink:a}=(0,we.O)();return r.createElement(ee.Z,{to:a(t.query),onClick:n},r.createElement(u.Z,{id:"theme.SearchBar.seeAll",values:{count:t.context.nbHits}},"See all {count} results"))}function Oe(e){var t;let{contextualSearch:a,externalUrlRegex:o,...i}=e;const{siteMetadata:u}=(0,de.Z)(),c=function(){const{locale:e,tags:t}=(0,Pe._q)(),n=`language:=${e}`;let r;return t.length>0&&(r=`docusaurus_tag:=[${t.join(",")}]`),[n,r].filter((e=>e)).join(" && ")}(),d=(null==(t=i.typesenseSearchParameters)?void 0:t.filter_by)??"",f={filter_by:a?[c,d].filter((e=>e)).join(" && "):d,...i.typesenseSearchParameters},p=i.typesenseServerConfig,m=i.typesenseCollectionName,{withBaseUrl:h}=(0,te.C)(),g=(0,s.k6)(),b=(0,r.useRef)(null),v=(0,r.useRef)(null),[y,w]=(0,r.useState)(!1),[k,E]=(0,r.useState)(void 0),S=(0,r.useCallback)((()=>Ae?Promise.resolve():Promise.all([Promise.all([n.e(118),n.e(4285),n.e(9964)]).then(n.bind(n,4285)),Promise.all([n.e(532),n.e(2664)]).then(n.bind(n,2664)),Promise.all([n.e(532),n.e(1144)]).then(n.bind(n,1144))]).then((e=>{let[{DocSearchModal:t}]=e;Ae=t}))),[]),x=(0,r.useCallback)((()=>{S().then((()=>{b.current=document.createElement("div"),document.body.insertBefore(b.current,document.body.firstChild),w(!0)}))}),[S,w]),T=(0,r.useCallback)((()=>{var e;w(!1),null==(e=b.current)||e.remove()}),[w]),_=(0,r.useCallback)((e=>{S().then((()=>{w(!0),E(e.key)}))}),[S,w,E]),C=(0,r.useRef)({navigate(e){let{itemUrl:t}=e;(0,re.F)(o,t)?window.location.href=t:g.push(t)}}).current,P=(0,r.useRef)((e=>e.map((e=>{if((0,re.F)(o,e.url))return e;const t=new URL(e.url);return{...e,url:h(`${t.pathname}${t.hash}`)}})))).current,I=(0,r.useMemo)((()=>e=>r.createElement(Ne,(0,l.Z)({},e,{onClose:T}))),[T]);return function(e){var t=e.isOpen,n=e.onOpen,a=e.onClose,o=e.onInput,i=e.searchButtonRef;r.useEffect((function(){function e(e){(27===e.keyCode&&t||"k"===e.key.toLowerCase()&&(e.metaKey||e.ctrlKey)||!function(e){var t=e.target,n=t.tagName;return t.isContentEditable||"INPUT"===n||"SELECT"===n||"TEXTAREA"===n}(e)&&"/"===e.key&&!t)&&(e.preventDefault(),t?a():document.body.classList.contains("DocSearch--active")||document.body.classList.contains("DocSearch--active")||n()),i&&i.current===document.activeElement&&o&&/[a-zA-Z0-9]/.test(String.fromCharCode(e.keyCode))&&o(e)}return window.addEventListener("keydown",e),function(){window.removeEventListener("keydown",e)}}),[t,n,a,o,i])}({isOpen:y,onOpen:x,onClose:T,onInput:_,searchButtonRef:v}),r.createElement(r.Fragment,null,r.createElement(Ce,{onTouchStart:S,onFocus:S,onMouseOver:S,onClick:x,ref:v,translations:Ie.button}),y&&Ae&&b.current&&(0,ye.createPortal)(r.createElement(Ae,(0,l.Z)({onClose:T,initialScrollY:window.scrollY,initialQuery:k,navigator:C,transformItems:P,hitComponent:Le},i.searchPagePath&&{resultsFooterComponent:I},i,{typesenseSearchParameters:f,typesenseServerConfig:p,typesenseCollectionName:m,placeholder:Ie.placeholder,translations:Ie.modal})),b.current))}function Re(){const{siteConfig:e}=(0,de.Z)();return r.createElement(Oe,e.themeConfig.typesense)}const Me="searchBox_ZlJk";function De(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,a.Z)(n,Me)},t)}var Fe=n(868),Be=n(3734);var $e=n(6409);const Ue=e=>e.docs.find((t=>t.id===e.mainDocId));const ze={default:se,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:a,...o}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,de.Z)(),f=(0,ge.l)(),{search:p,hash:m}=(0,s.TH)(),h=[...n,...c.map((e=>{const n=`${`pathname://${f.createUrl({locale:e,fullyQualified:!1})}`}${p}${m}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...a],g=t?(0,u.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return r.createElement(he,(0,l.Z)({},o,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(be,{className:ve}),g),items:h}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(De,{className:n},r.createElement(Re,null))},dropdown:he,html:function(e){let{value:t,className:n,mobile:o=!1,isDropdownItem:i=!1}=e;const l=i?"li":"div";return r.createElement(l,{className:(0,a.Z)({navbar__item:!o&&!i,"menu__list-item":o},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,Fe.Iw)(a),s=(0,Be.vY)(t,a);return null===s?null:r.createElement(se,(0,l.Z)({exact:!0},o,{isActive:()=>(null==i?void 0:i.path)===s.path||!(null==i||!i.sidebar)&&i.sidebar===s.sidebar,label:n??s.id,to:s.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,Fe.Iw)(a),s=(0,Be.oz)(t,a).link;if(!s)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(se,(0,l.Z)({exact:!0},o,{isActive:()=>(null==i?void 0:i.sidebar)===t,label:n??s.label,to:s.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:a,...o}=e;const i=(0,Be.lO)(a)[0],s=t??i.label,u=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return r.createElement(se,(0,l.Z)({},o,{label:s,to:u}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:a,dropdownItemsBefore:o,dropdownItemsAfter:i,...c}=e;const{search:d,hash:f}=(0,s.TH)(),p=(0,Fe.Iw)(n),m=(0,Fe.gB)(n),{savePreferredVersionName:h}=(0,$e.J)(n),g=[...o,...m.map((e=>{const t=p.alternateDocVersions[e.name]??Ue(e);return{label:e.label,to:`${t.path}${d}${f}`,isActive:()=>e===p.activeVersion,onClick:()=>h(e.name)}})),...i],b=(0,Be.lO)(n)[0],v=t&&g.length>1?(0,u.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):b.label,y=t&&g.length>1?void 0:Ue(b).path;return g.length<=1?r.createElement(se,(0,l.Z)({},c,{mobile:t,label:v,to:y,isActive:a?()=>!1:void 0})):r.createElement(he,(0,l.Z)({},c,{mobile:t,label:v,to:y,items:g,isActive:a?()=>!1:void 0}))}};function je(e){let{type:t,...n}=e;const a=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=ze[a];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(o,n)}function Ze(){const e=(0,N.e)(),t=(0,w.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(je,(0,l.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function Ve(e){return r.createElement("button",(0,l.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(u.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function He(){const e=0===(0,w.L)().navbar.items.length,t=$();return r.createElement(r.Fragment,null,!e&&r.createElement(Ve,{onClick:()=>t.hide()}),t.content)}function qe(){const e=(0,N.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?r.createElement(U,{header:r.createElement(J,null),primaryMenu:r.createElement(Ze,null),secondaryMenu:r.createElement(He,null)}):null}const We="navbarHideable_m1mJ",Ge="navbarHidden_jGov";function Ke(e){return r.createElement("div",(0,l.Z)({role:"presentation"},e,{className:(0,a.Z)("navbar-sidebar__backdrop",e.className)}))}function Ye(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,w.L)(),i=(0,N.e)(),{navbarRef:l,isNavbarVisible:s}=function(e){const[t,n]=(0,r.useState)(e),a=(0,r.useRef)(!1),o=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,O.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i=l?n(!1):i+u{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return a.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return r.createElement("nav",{ref:l,"aria-label":(0,u.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,a.Z)("navbar","navbar--fixed-top",n&&[We,!s&&Ge],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":i.shown})},t,r.createElement(Ke,{onClick:i.toggle}),r.createElement(qe,null))}var Qe=n(3905);const Xe="errorBoundaryError_a6uf";function Je(e){return r.createElement("button",(0,l.Z)({type:"button"},e),r.createElement(u.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error"},"Try again"))}function et(e){let{error:t}=e;const n=(0,Qe.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{className:Xe},n)}class tt extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}function nt(e){let{width:t=30,height:n=30,className:a,...o}=e;return r.createElement("svg",(0,l.Z)({className:a,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},o),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function rt(){const{toggle:e,shown:t}=(0,N.e)();return r.createElement("button",{onClick:e,"aria-label":(0,u.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},r.createElement(nt,null))}const at="colorModeToggle_DEke";function ot(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement(tt,{key:t,onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t})},r.createElement(je,e)))))}function it(e){let{left:t,right:n}=e;return r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},t),r.createElement("div",{className:"navbar__items navbar__items--right"},n))}function lt(){const e=(0,N.e)(),t=(0,w.L)().navbar.items,[n,a]=function(e){function t(e){return"left"===(e.position??"right")}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return r.createElement(it,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement(rt,null),r.createElement(Q,null),r.createElement(ot,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(ot,{items:a}),r.createElement(K,{className:at}),!o&&r.createElement(De,null,r.createElement(Re,null)))})}function st(){return r.createElement(Ye,null,r.createElement(lt,null))}function ut(e){let{item:t}=e;const{to:n,href:a,label:o,prependBaseUrlToHref:i,...s}=t,u=(0,te.Z)(n),c=(0,te.Z)(a,{forcePrependBaseUrl:!0});return r.createElement(ee.Z,(0,l.Z)({className:"footer__link-item"},a?{href:i?c:a}:{to:u},s),o,a&&!(0,ne.Z)(a)&&r.createElement(ae.Z,null))}function ct(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement(ut,{item:t}))}function dt(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(ct,{key:t,item:e})))))}function ft(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(dt,{key:t,column:e}))))}function pt(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function mt(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(ut,{item:t})}function ht(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(mt,{item:e}),t.length!==n+1&&r.createElement(pt,null))))))}function gt(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?r.createElement(ft,{columns:t}):r.createElement(ht,{links:t})}var bt=n(7909);const vt="footerLogoLink_BH7S";function yt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,te.C)(),o={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(bt.Z,{className:(0,a.Z)("footer__logo",t.className),alt:t.alt,sources:o,width:t.width,height:t.height,style:t.style})}function wt(e){let{logo:t}=e;return t.href?r.createElement(ee.Z,{href:t.href,className:vt,target:t.target},r.createElement(yt,{logo:t})):r.createElement(yt,{logo:t})}function kt(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function Et(e){let{style:t,links:n,logo:o,copyright:i}=e;return r.createElement("footer",{className:(0,a.Z)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(o||i)&&r.createElement("div",{className:"footer__bottom text--center"},o&&r.createElement("div",{className:"margin-bottom--sm"},o),i)))}function St(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:a,style:o}=e;return r.createElement(Et,{style:o,links:n&&n.length>0&&r.createElement(gt,{links:n}),logo:a&&r.createElement(wt,{logo:a}),copyright:t&&r.createElement(kt,{copyright:t})})}const xt=r.memo(St),Tt=(0,R.Qc)([z.S,k.pl,O.OC,$e.L5,i.VC,function(e){let{children:t}=e;return r.createElement(M.n2,null,r.createElement(N.M,null,r.createElement(F,null,t)))}]);function _t(e){let{children:t}=e;return r.createElement(Tt,null,t)}function Ct(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(u.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("div",{className:"margin-vert--lg"},r.createElement(Je,{onClick:n,className:"button button--primary shadow--lw"})),r.createElement("hr",null),r.createElement("div",{className:"margin-vert--md"},r.createElement(et,{error:t})))))}const Pt="mainWrapper_z2l0";function It(e){const{children:t,noFooter:n,wrapperClassName:l,title:s,description:u}=e;return(0,b.t)(),r.createElement(_t,null,r.createElement(i.d,{title:s,description:u}),r.createElement(y,null),r.createElement(L,null),r.createElement(st,null),r.createElement("div",{id:d,className:(0,a.Z)(g.k.wrapper.main,Pt,l)},r.createElement(o.Z,{fallback:e=>r.createElement(Ct,e)},t)),!n&&r.createElement(xt,null))}},6811:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(7462),a=n(7294),o=n(3699),i=n(9524),l=n(9962),s=n(107),u=n(7909);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const o={light:(0,i.Z)(t.src),dark:(0,i.Z)(t.srcDark||t.src)},l=a.createElement(u.Z,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return r?a.createElement("div",{className:r},l):l}function d(e){const{siteConfig:{title:t}}=(0,l.Z)(),{navbar:{title:n,logo:u}}=(0,s.L)(),{imageClassName:d,titleClassName:f,...p}=e,m=(0,i.Z)((null==u?void 0:u.href)||"/"),h=n?"":t,g=(null==u?void 0:u.alt)??h;return a.createElement(o.Z,(0,r.Z)({to:m},p,(null==u?void 0:u.target)&&{target:u.target}),u&&a.createElement(c,{logo:u,alt:g,imageClassName:d}),null!=n&&a.createElement("b",{className:f},n))}},3647:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(1514);function o(e){let{locale:t,version:n,tag:o}=e;const i=t;return r.createElement(a.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),o&&r.createElement("meta",{name:"docusaurus_tag",content:o}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),o&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:o}))}},7909:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(7462),a=n(7294),o=n(6010),i=n(1048),l=n(9200);const s={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function u(e){const t=(0,i.Z)(),{colorMode:n}=(0,l.I)(),{sources:u,className:c,alt:d,...f}=e,p=t?"dark"===n?["dark"]:["light"]:["light","dark"];return a.createElement(a.Fragment,null,p.map((e=>a.createElement("img",(0,r.Z)({key:e,src:u[e],alt:d,className:(0,o.Z)(s.themedImage,s[`themedImage--${e}`],c)},f)))))}},4639:(e,t,n)=>{"use strict";n.d(t,{u:()=>i,z:()=>h});var r=n(7462),a=n(7294),o=n(6136);function i(e){let{initialState:t}=e;const[n,r]=(0,a.useState)(t??!1),o=(0,a.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:o}}const l={display:"none",overflow:"hidden",height:"0px"},s={display:"block",overflow:"visible",height:"auto"};function u(e,t){const n=t?l:s;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function c(e){if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return 0;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}function d(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const o=(0,a.useRef)(!1);(0,a.useEffect)((()=>{const e=t.current;function a(){const t=function(){const t=e.scrollHeight;return{transition:`height ${(null==r?void 0:r.duration)??c(t)}ms ${(null==r?void 0:r.easing)??"ease-in-out"}`,height:`${t}px`}}();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return u(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(a(),requestAnimationFrame((()=>{e.style.height=l.height,e.style.overflow=l.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{a()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function f(e){if(!o.Z.canUseDOM)return e?l:s}function p(e){let{as:t="div",collapsed:n,children:r,animation:o,onCollapseTransitionEnd:i,className:l,disableSSRStyle:s}=e;const c=(0,a.useRef)(null);return d({collapsibleRef:c,collapsed:n,animation:o}),a.createElement(t,{ref:c,style:s?void 0:f(n),onTransitionEnd:e=>{"height"===e.propertyName&&(u(c.current,n),null==i||i(n))},className:l},r)}function m(e){let{collapsed:t,...n}=e;const[o,i]=(0,a.useState)(!t),[l,s]=(0,a.useState)(t);return(0,a.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,a.useLayoutEffect)((()=>{o&&s(t)}),[o,t]),o?a.createElement(p,(0,r.Z)({},n,{collapsed:l})):null}function h(e){let{lazy:t,...n}=e;const r=t?m:p;return a.createElement(r,n)}},5830:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>p});var r=n(7294),a=n(1048),o=n(2560),i=n(3768),l=n(107);const s=(0,o.WA)("docusaurus.announcement.dismiss"),u=(0,o.WA)("docusaurus.announcement.id"),c=()=>"true"===s.get(),d=e=>s.set(String(e)),f=r.createContext(null);function p(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.L)(),t=(0,a.Z)(),[n,o]=(0,r.useState)((()=>!!t&&c()));(0,r.useEffect)((()=>{o(c())}),[]);const i=(0,r.useCallback)((()=>{d(!0),o(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&d(!1),!r&&c()||o(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return r.createElement(f.Provider,{value:n},t)}function m(){const e=(0,r.useContext)(f);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},9200:(e,t,n)=>{"use strict";n.d(t,{I:()=>g,S:()=>h});var r=n(7294),a=n(6136),o=n(3768),i=n(2560),l=n(107);const s=r.createContext(void 0),u="theme",c=(0,i.WA)(u),d="light",f="dark",p=e=>e===f?f:d;function m(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.L)(),[o,i]=(0,r.useState)((e=>a.Z.canUseDOM?p(document.documentElement.getAttribute("data-theme")):p(e))(e));(0,r.useEffect)((()=>{t&&c.del()}),[t]);const s=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:a=!0}=r;t?(i(t),a&&(e=>{c.set(p(e))})(t)):(i(n?window.matchMedia("(prefers-color-scheme: dark)").matches?f:d:e),c.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",p(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=c.get();null!==t&&s(p(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,s]);const m=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||m.current?m.current=window.matchMedia("print").matches:s(null)};return e.addListener(r),()=>e.removeListener(r)}),[s,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:s,get isDarkTheme(){return o===f},setLightTheme(){s(d)},setDarkTheme(){s(f)}})),[o,s])}function h(e){let{children:t}=e;const n=m();return r.createElement(s.Provider,{value:n},t)}function g(){const e=(0,r.useContext)(s);if(null==e)throw new o.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},6409:(e,t,n)=>{"use strict";n.d(t,{J:()=>y,L5:()=>b,Oh:()=>w});var r=n(7294),a=n(868),o=n(6875),i=n(107),l=n(3734),s=n(3768),u=n(2560);const c=e=>`docs-preferred-version-${e}`,d=(e,t,n)=>{(0,u.WA)(c(e),{persistence:t}).set(n)},f=(e,t)=>(0,u.WA)(c(e),{persistence:t}).get(),p=(e,t)=>{(0,u.WA)(c(e),{persistence:t}).del()};const m=r.createContext(null);function h(){const e=(0,a._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[o,l]=(0,r.useState)((()=>(e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}]))))(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=f(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(p(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[o,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function g(e){let{children:t}=e;const n=h();return r.createElement(m.Provider,{value:n},t)}function b(e){let{children:t}=e;return l.cE?r.createElement(g,null,t):r.createElement(r.Fragment,null,t)}function v(){const e=(0,r.useContext)(m);if(!e)throw new s.i6("DocsPreferredVersionContextProvider");return e}function y(e){void 0===e&&(e=o.m);const t=(0,a.zh)(e),[n,i]=v(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}function w(){const e=(0,a._r)(),[t]=v();function n(n){const r=e[n],{preferredVersionName:a}=t[n];return r.versions.find((e=>e.name===a))??null}const r=Object.keys(e);return Object.fromEntries(r.map((e=>[e,n(e)])))}},4432:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,b:()=>l});var r=n(7294),a=n(3768);const o=Symbol("EmptyContext"),i=r.createContext(o);function l(e){let{children:t,name:n,items:a}=e;const o=(0,r.useMemo)((()=>n&&a?{name:n,items:a}:null),[n,a]);return r.createElement(i.Provider,{value:o},t)}function s(){const e=(0,r.useContext)(i);if(e===o)throw new a.i6("DocsSidebarProvider");return e}},2600:(e,t,n)=>{"use strict";n.d(t,{M:()=>f,e:()=>p});var r=n(7294),a=n(3086),o=n(3488),i=n(6550),l=(n(1688),n(3768));function s(e){!function(e){const t=(0,i.k6)(),n=(0,l.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var u=n(107);const c=r.createContext(void 0);function d(){const e=function(){const e=(0,a.HY)(),{items:t}=(0,u.L)().navbar;return 0===t.length&&!e.component}(),t=(0,o.i)(),n=!e&&"mobile"===t,[i,l]=(0,r.useState)(!1);s((()=>{if(i)return l(!1),!1}));const c=(0,r.useCallback)((()=>{l((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&l(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:c,shown:i})),[e,n,c,i])}function f(e){let{children:t}=e;const n=d();return r.createElement(c.Provider,{value:n},t)}function p(){const e=r.useContext(c);if(void 0===e)throw new l.i6("NavbarMobileSidebarProvider");return e}},3086:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>s,n2:()=>i});var r=n(7294),a=n(3768);const o=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(o.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(o);if(!e)throw new a.i6("NavbarSecondaryMenuContentProvider");return e[0]}function s(e){let{component:t,props:n}=e;const i=(0,r.useContext)(o);if(!i)throw new a.i6("NavbarSecondaryMenuContentProvider");const[,l]=i,s=(0,a.Ql)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},8181:(e,t,n)=>{"use strict";n.d(t,{h:()=>a,t:()=>o});var r=n(7294);const a="navigation-with-keyboard";function o(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},3488:(e,t,n)=>{"use strict";n.d(t,{i:()=>u});var r=n(7294),a=n(6136);const o="desktop",i="mobile",l="ssr";function s(){return a.Z.canUseDOM?window.innerWidth>996?o:i:l}function u(){const[e,t]=(0,r.useState)((()=>s()));return(0,r.useEffect)((()=>{function e(){t(s())}return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(undefined)}}),[]),e}},3702:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},3734:(e,t,n)=>{"use strict";n.d(t,{Wl:()=>f,_F:()=>m,cE:()=>d,hI:()=>w,lO:()=>b,vY:()=>y,oz:()=>v,s1:()=>g});var r=n(7294),a=n(6550),o=n(8790),i=n(868),l=n(6409),s=n(4432);function u(e){return Array.from(new Set(e))}var c=n(9003);const d=!!i._r;function f(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=f(t);if(e)return e}}}const p=(e,t)=>void 0!==e&&(0,c.Mg)(e,t);function m(e,t){return"link"===e.type?p(e.href,t):"category"===e.type&&(p(e.href,t)||((e,t)=>e.some((e=>m(e,t))))(e.items,t))}function h(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const a=[];return function e(t){for(const o of t)if("category"===o.type&&((0,c.Mg)(o.href,n)||e(o.items))||"link"===o.type&&(0,c.Mg)(o.href,n)){return r&&"category"!==o.type||a.unshift(o),!0}return!1}(t),a}function g(){var e;const t=(0,s.V)(),{pathname:n}=(0,a.TH)();return!1!==(null==(e=(0,i.gA)())?void 0:e.pluginData.breadcrumbs)&&t?h({sidebarItems:t.items,pathname:n}):null}function b(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,l.J)(e),a=(0,i.yW)(e);return(0,r.useMemo)((()=>u([t,n,a].filter(Boolean))),[t,n,a])}function v(e,t){const n=b(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${Object.keys(t).join("\n- ")}`);return r[1]}),[e,n])}function y(e,t){const n=b(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${u(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function w(e){let{route:t,versionMetadata:n}=e;const r=(0,a.TH)(),i=t.routes,l=i.find((e=>(0,a.LX)(r.pathname,e)));if(!l)return null;const s=l.sidebar,u=s?n.docsSidebars[s]:void 0;return{docElement:(0,o.H)(i),sidebarName:s,sidebarItems:u}}},5463:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>c,VC:()=>p});var r=n(7294),a=n(6010),o=n(1514),i=n(9656);function l(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(9524),u=n(9962);function c(e){let{title:t,description:n,keywords:a,image:i,children:l}=e;const c=function(e){const{siteConfig:t}=(0,u.Z)(),{title:n,titleDelimiter:r}=t;return null!=e&&e.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.C)(),f=i?d(i,{absolute:!0}):void 0;return r.createElement(o.Z,null,t&&r.createElement("title",null,c),t&&r.createElement("meta",{property:"og:title",content:c}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),a&&r.createElement("meta",{name:"keywords",content:Array.isArray(a)?a.join(","):a}),f&&r.createElement("meta",{property:"og:image",content:f}),f&&r.createElement("meta",{name:"twitter:image",content:f}),l)}const d=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(d),l=(0,a.Z)(i,t);return r.createElement(d.Provider,{value:l},r.createElement(o.Z,null,r.createElement("html",{className:l})),n)}function p(e){let{children:t}=e;const n=l(),o=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return r.createElement(f,{className:(0,a.Z)(o,i)},t)}},3768:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,Qc:()=>u,Ql:()=>s,i6:()=>l,zX:()=>o});var r=n(7294);const a=n(6136).Z.canUseDOM?r.useLayoutEffect:r.useEffect;function o(e){const t=(0,r.useRef)(e);return a((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return a((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){var n,r,a;super(),this.name="ReactContextError",this.message=`Hook ${(null==(n=this.stack)||null==(r=n.split("\n")[1])||null==(a=r.match(/at (?:\w+\.)?(?\w+)/))?void 0:a.groups.name)??""} is called outside the <${e}>. ${t??""}`}}function s(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},1500:(e,t,n)=>{"use strict";function r(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}n.d(t,{F:()=>r})},9003:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>l});var r=n(7294),a=n(997),o=n(9962);function i(e,t){const n=e=>{var t;return null==(t=!e||e.endsWith("/")?e:`${e}/`)?void 0:t.toLowerCase()};return n(e)===n(t)}function l(){const{baseUrl:e}=(0,o.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(a).flatMap((e=>e.routes??[])))}(n)}({routes:a.Z,baseUrl:e})),[e])}},2957:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>f,OC:()=>s,RF:()=>d});var r=n(7294),a=n(6136),o=n(1048),i=n(3768);const l=r.createContext(void 0);function s(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return r.createElement(l.Provider,{value:n},t)}function u(){const e=(0,r.useContext)(l);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const c=()=>a.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),a=(0,r.useRef)(c()),o=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=c();o(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[o,n,...t])}function f(){const e=(0,r.useRef)(null),t=(0,o.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const a=document.documentElement.scrollTop;(n&&a>e||!n&&at&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>null==e.current?void 0:e.current()}}},246:(e,t,n)=>{"use strict";n.d(t,{HX:()=>i,_q:()=>s,os:()=>l});var r=n(868),a=n(9962),o=n(6409);const i="default";function l(e,t){return`docs-${e}-${t}`}function s(){const{i18n:e}=(0,a.Z)(),t=(0,r._r)(),n=(0,r.WS)(),s=(0,o.Oh)();const u=[i,...Object.keys(t).map((function(e){const r=(null==n?void 0:n.activePlugin.pluginId)===e?n.activeVersion:void 0,a=s[e],o=t[e].versions.find((e=>e.isLast));return l(e,(r??a??o).name)}))];return{locale:e.currentLocale,tags:u}}},2560:(e,t,n)=>{"use strict";n.d(t,{WA:()=>s});n(7294),n(1688);const r="localStorage";function a(e){let{key:t,oldValue:n,newValue:r,storage:a}=e;if(n===r)return;const o=document.createEvent("StorageEvent");o.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,a),window.dispatchEvent(o)}function o(e){if(void 0===e&&(e=r),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,i||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),i=!0),null}var t}let i=!1;const l={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function s(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=o(null==t?void 0:t.persistence);return null===n?l:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),a({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),a({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}},626:(e,t,n)=>{"use strict";n.d(t,{l:()=>o});var r=n(9962),a=n(6550);function o(){const{siteConfig:{baseUrl:e,url:t},i18n:{defaultLocale:n,currentLocale:o}}=(0,r.Z)(),{pathname:i}=(0,a.TH)(),l=o===n?e:e.replace(`/${o}/`,"/"),s=i.replace(e,"");return{createUrl:function(e){let{locale:r,fullyQualified:a}=e;return`${a?t:""}${function(e){return e===n?`${l}`:`${l}${e}/`}(r)}${s}`}}}},3266:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),a=n(6550),o=n(3768);function i(e){const t=(0,a.TH)(),n=(0,o.D9)(t),i=(0,o.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},107:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(9962);function a(){return(0,r.Z)().siteConfig.themeConfig}},4136:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[a]=e.split(/[#?]/),o="/"===a||a===r?a:(i=a,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(a,o)}},5806:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},3905:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="post-content";var a=n(4136);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}});var o=n(5806);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return o.getErrorCausalChain}})},7795:(e,t,n)=>{"use strict";n.d(t,{O:()=>l});var r=n(7294),a=n(6550),o=n(9962);const i="q";function l(){const e=(0,a.k6)(),{siteConfig:{baseUrl:t}}=(0,o.Z)(),[n,l]=(0,r.useState)("");(0,r.useEffect)((()=>{const e=new URLSearchParams(window.location.search).get(i)??"";l(e)}),[]);return{searchQuery:n,setSearchQuery:(0,r.useCallback)((t=>{const n=new URLSearchParams(window.location.search);t?n.set(i,t):n.delete(i),e.replace({search:n.toString()}),l(t)}),[e]),generateSearchPageLink:(0,r.useCallback)((e=>`${t}search?q=${encodeURIComponent(e)}`),[t])}}},6010:(e,t,n)=>{"use strict";function r(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;ta});const a=function(){for(var e,t,n=0,a="";n{"use strict";n.d(t,{lX:()=>w,q_:()=>_,ob:()=>p,PP:()=>P,Ep:()=>f});var r=n(7462);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r=0;f--){var p=i[f];"."===p?o(i,f):".."===p?(o(i,f),d++):d&&(o(i,f),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&a(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var l=n(8776);function s(e){return"/"===e.charAt(0)?e:"/"+e}function u(e){return"/"===e.charAt(0)?e.substr(1):e}function c(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function f(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function p(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.Z)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=p(e,t,h(),w.location);c.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,d({action:r,location:a}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t{"use strict";var r=n(9864),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||a}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var a=p(n);a&&a!==m&&e(t,a,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),h=s(n),g=0;g{"use strict";e.exports=function(e,t,n,r,a,o,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,a,o,i,l],c=0;(s=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},984:(e,t,n)=>{"use strict";n.r(t)},6930:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function a(e,t,n){return en?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),u=o.querySelector(r.barSelector),c=r.speed,d=r.easing;return o.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,i(e,c,d)),1===e?(s(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){s(o,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),l=e?"-100":o(n.status||0),u=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&p(a),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function u(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=f(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},7418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;function a(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(a){return!1}}()?Object.assign:function(e,o){for(var i,l,s=a(e),u=1;u{var r=n(5826);e.exports=p,e.exports.parse=o,e.exports.compile=function(e,t){return l(o(e,t),t)},e.exports.tokensToFunction=l,e.exports.tokensToRegExp=f;var a=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function o(e,t){for(var n,r=[],o=0,i=0,l="",c=t&&t.delimiter||"/";null!=(n=a.exec(e));){var d=n[0],f=n[1],p=n.index;if(l+=e.slice(i,p),i=p+d.length,f)l+=f[1];else{var m=e[i],h=n[2],g=n[3],b=n[4],v=n[5],y=n[6],w=n[7];l&&(r.push(l),l="");var k=null!=h&&null!=m&&m!==h,E="+"===y||"*"===y,S="?"===y||"*"===y,x=n[2]||c,T=b||v;r.push({name:g||o++,prefix:h||"",delimiter:x,optional:S,repeat:E,partial:k,asterisk:!!w,pattern:T?u(T):w?".*":"[^"+s(x)+"]+?"})}}return i{"use strict";n.d(t,{Z:()=>o});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof a?new a(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=d.reach);S+=E.value.length,E=E.next){var x=E.value;if(t.length>e.length)return;if(!(x instanceof a)){var T,_=1;if(v){if(!(T=o(k,S,e,b))||T.index>=e.length)break;var C=T.index,P=T.index+T[0].length,I=S;for(I+=E.value.length;C>=I;)I+=(E=E.next).value.length;if(S=I-=E.value.length,E.value instanceof a)continue;for(var A=E;A!==t.tail&&(Id.reach&&(d.reach=R);var M=E.prev;if(N&&(M=s(t,M,N),S+=N.length),u(t,M,_),E=s(t,M,new a(f,g?r.tokenize(L,g):L,y,L)),O&&s(t,E,O),_>1){var D={cause:f+","+m,reach:R};i(e,t,n,E.prev,S,D),d&&D.reach>d.reach&&(d.reach=D.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,a={value:n,prev:t,next:r};return t.next=a,r.prev=a,e.length++,a}function u(e,t,n){for(var r=t.next,a=0;a"+o.content+""},r}(),a=r;r.default=r,a.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},a.languages.markup.tag.inside["attr-value"].inside.entity=a.languages.markup.entity,a.languages.markup.doctype.inside["internal-subset"].inside=a.languages.markup,a.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(a.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:a.languages[t]},n.cdata=/^$/i;var r={"included-cdata":{pattern://i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:a.languages[t]};var o={};o[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},a.languages.insertBefore("markup","cdata",o)}}),Object.defineProperty(a.languages.markup.tag,"addAttribute",{value:function(e,t){a.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:a.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),a.languages.html=a.languages.markup,a.languages.mathml=a.languages.markup,a.languages.svg=a.languages.markup,a.languages.xml=a.languages.extend("markup",{}),a.languages.ssml=a.languages.xml,a.languages.atom=a.languages.xml,a.languages.rss=a.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,i=0;i]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},a.languages.c=a.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),a.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),a.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},a.languages.c.string],char:a.languages.c.char,comment:a.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:a.languages.c}}}}),a.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete a.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!)\w+(?:\s*\.\s*\w+)*\b/.source.replace(//g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/(?:\s*:\s*)?|:\s*/.source.replace(//g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(a),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(a),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},a={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:a,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:a})}(a),a.languages.javascript=a.languages.extend("clike",{"class-name":[a.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),a.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,a.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:a.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:a.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:a.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:a.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:a.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),a.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:a.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),a.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),a.languages.markup&&(a.languages.markup.tag.addInlined("script","javascript"),a.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),a.languages.js=a.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(a),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",a=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),o=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return"(?:"+a+"|"+o+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(o),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(a),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(//g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,a=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),o=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+a+o+"(?:"+a+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+a+o+")(?:"+a+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+a+")"+o+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+a+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)|_(?:(?!_))+_)+__\b|\*\*(?:(?!\*)|\*(?:(?!\*))+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)|__(?:(?!_))+__)+_\b|\*(?:(?!\*)|\*\*(?:(?!\*))+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~))+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\]))+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(a),a.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:a.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},a.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n0)){var l=f(/^\{$/,/^\}$/);if(-1===l)continue;for(var s=n;s=0&&p(u,"variable-input")}}}}function c(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,a=r.inside["interpolation-punctuation"],o=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function l(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function s(t,n,r){var a={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",a),a.tokens=e.tokenize(a.code,a.grammar),e.hooks.run("after-tokenize",a),a.tokens}function u(t){var n={};n["interpolation-punctuation"]=a;var o=e.tokenize(t,n);if(3===o.length){var i=[1,1];i.push.apply(i,s(o[1],e.languages.javascript,"javascript")),o.splice.apply(o,i)}return new e.Token("interpolation",o,r.alias,t)}function c(t,n,r){var a=e.tokenize(t,{interpolation:{pattern:RegExp(o),lookbehind:!0}}),i=0,c={},d=s(a.map((function(e){if("string"==typeof e)return e;for(var n,a=e.content;-1!==t.indexOf(n=l(i++,r)););return c[n]=a,n})).join(""),n,r),f=Object.keys(c);return i=0,function e(t){for(var n=0;n=f.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var a=f[i],o="string"==typeof r?r:r.content,l=o.indexOf(a);if(-1!==l){++i;var s=o.substring(0,l),d=u(c[a]),p=o.substring(l+a.length),m=[];if(s&&m.push(s),m.push(d),p){var h=[p];e(h),m.push.apply(m,h)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var g=r.content;Array.isArray(g)?e(g):e([g])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,a=n.length;r]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(a),function(e){function t(e,t){return RegExp(e.replace(//g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:(?:\s*,\s*(?:\*\s*as\s+|\{[^{}]*\}))?|\*\s*as\s+|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r*\.{3}(?:[^{}]|)*\})/.source;function o(e,t){return e=e.replace(//g,(function(){return n})).replace(//g,(function(){return r})).replace(//g,(function(){return a})),RegExp(e,t)}a=o(a).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=o(/<\/?(?:[\w.:-]+(?:+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|))?|))**\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:o(//.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:o(/=/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},l=function(t){for(var n=[],r=0;r0&&n[n.length-1].tagName===i(a.content[0].content[1])&&n.pop():"/>"===a.content[a.content.length-1].content||n.push({tagName:i(a.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===a.type&&"{"===a.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===a.type&&"}"===a.content?n[n.length-1].openedBraces--:o=!0),(o||"string"==typeof a)&&n.length>0&&0===n[n.length-1].openedBraces){var s=i(a);r0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(s=i(t[r-1])+s,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",s,null,s)}a.content&&"string"!=typeof a.content&&l(a.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||l(e.tokens)}))}(a),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],a=[];/^\w+$/.test(n)||a.push(/\w+/.exec(n)[0]),"diff"===n&&a.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(a),a.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},a.languages.go=a.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),a.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete a.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,l=i.length;-1!==n.code.indexOf(a=t(r,l));)++l;return i[l]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(l){for(var s=0;s=o.length);s++){var u=l[s];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=o[a],d=n.tokenStack[c],f="string"==typeof u?u:u.content,p=t(r,c),m=f.indexOf(p);if(m>-1){++a;var h=f.substring(0,m),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=f.substring(m+p.length),v=[];h&&v.push.apply(v,i([h])),v.push(g),b&&v.push.apply(v,i([b])),"string"==typeof u?l.splice.apply(l,[s,1].concat(v)):u.content=v}}else u.content&&i(u.content)}return l}(n.tokens)}}}})}(a),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(a),a.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},a.languages.webmanifest=a.languages.json,a.languages.less=a.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),a.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),a.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},a.languages.objectivec=a.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete a.languages.objectivec["class-name"],a.languages.objc=a.languages.objectivec,a.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},a.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},a.languages.python["string-interpolation"].inside.interpolation.inside.rest=a.languages.python,a.languages.py=a.languages.python,a.languages.reason=a.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),a.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete a.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(a),a.languages.scss=a.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),a.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),a.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),a.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),a.languages.scss.atrule.inside.rest=a.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(a),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(a),a.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const o=a},893:()=>{Prism.languages.solidity=Prism.languages.extend("clike",{"class-name":{pattern:/(\b(?:contract|enum|interface|library|new|struct|using)\s+)(?!\d)[\w$]+/,lookbehind:!0},keyword:/\b(?:_|anonymous|as|assembly|assert|break|calldata|case|constant|constructor|continue|contract|default|delete|do|else|emit|enum|event|external|for|from|function|if|import|indexed|inherited|interface|internal|is|let|library|mapping|memory|modifier|new|payable|pragma|private|public|pure|require|returns?|revert|selfdestruct|solidity|storage|struct|suicide|switch|this|throw|using|var|view|while)\b/,operator:/=>|->|:=|=:|\*\*|\+\+|--|\|\||&&|<<=?|>>=?|[-+*/%^&|<>!=]=?|[~?]/}),Prism.languages.insertBefore("solidity","keyword",{builtin:/\b(?:address|bool|byte|u?int(?:8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?|string|bytes(?:[1-9]|[12]\d|3[0-2])?)\b/}),Prism.languages.insertBefore("solidity","number",{version:{pattern:/([<>]=?|\^)\d+\.\d+\.\d+\b/,lookbehind:!0,alias:"number"}}),Prism.languages.sol=Prism.languages.solidity},772:(e,t,n)=>{var r={"./prism-solidity":893};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=772},2703:(e,t,n)=>{"use strict";var r=n(414);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),a=n(7418),o=n(3840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n