1(self.webpackChunk=self.webpackChunk||[]).push([[6213,7918],{346:(e,t,a)=>{"use strict";a.d(t,{O2:()=>c,SQ:()=>d});var n=a(7294),r=a(4866),s=a(5162),o=a(1841),i=a.n(o),l=a(5665),u=a.n(l);function c(e){var t=e.children;return Array.isArray(t)||(t=[t]),n.createElement(r.Z,{className:"language-tabs",groupId:"code-tabs"},t.map((function(e,t){return n.createElement(s.Z,{value:e.props.value,label:e.props.value},e)})))}function d(e){var t=e.children,a=e.language;return Array.isArray(t)||(t=[t]),t=t.map((function(e){return function(e,t){var a=e.props,r=a.children,s=a.url,o=a.start,l=a.end,c=a.fname;if("Github"==e.props.mdxType)return function(e){var t=e.url,a=e.start,r=e.end,s=e.language,o=e.fname,i=t+"#";a&&r&&(i+="L"+a+"-L"+r+"#");return n.createElement(u(),{language:s,fname:o},i)}({url:s,start:o,end:l,language:t,fname:c});if("CodeBlock"==e.props.mdxType)return n.createElement(i(),{fname:c,language:t},r);return e}(e,a)})),1==t.length?n.createElement(s.Z,{value:0,label:t[0].props.fname},t[0]):n.createElement(r.Z,{className:"file-tabs"},t.map((function(e,t){return n.createElement(s.Z,{value:t,label:e.props.fname},e)})))}},5162:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});var n=a(7294),r=a(6010);const s={tabItem:"tabItem_Ymn6"};function o(e){var t=e.children,a=e.hidden,o=e.className;return n.createElement("div",{role:"tabpanel",className:(0,r.Z)(s.tabItem,o),hidden:a},t)}},4866:(e,t,a)=>{"use strict";a.d(t,{Z:()=>D});var n=a(7462),r=a(7294),s=a(6010),o=a(2466),i=a(6550),l=a(1980),u=a(7392),c=a(12);function d(e){return function(e){var t,a;return null!=(t=null==(a=r.Children.map(e,(function(e){if(!e||(0,r.isValidElement)(e)&&(t=e.props)&&"object"==typeof t&&"value"in t)return e;var t;throw new Error("Docusaurus error: Bad <Tabs> child <"+("string"==typeof e.type?e.type:e.type.name)+'>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.')})))?void 0:a.filter(Boolean))?t:[]}(e).map((function(e){var t=e.props;return{value:t.value,label:t.label,attributes:t.attributes,default:t.default}}))}function p(e){var t=e.values,a=e.children;return(0,r.useMemo)((function(){var e=null!=t?t:d(a);return function(e){var t=(0,u.l)(e,(function(e,t){return e.value===t.value}));if(t.length>0)throw new Error('Docusaurus error: Duplicate values "'+t.map((function(e){return e.value})).join(", ")+'" found in <Tabs>. Every value needs to be unique.')}(e),e}),[t,a])}function m(e){var t=e.value;return e.tabValues.some((function(e){return e.value===t}))}function h(e){var t=e.queryString,a=void 0!==t&&t,n=e.groupId,s=(0,i.k6)(),o=function(e){var t=e.queryString,a=void 0!==t&&t,n=e.groupId;if("string"==typeof a)return a;if(!1===a)return null;if(!0===a&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:a,groupId:n});return[(0,l._X)(o),(0,r.useCallback)((function(e){if(o){var t=new URLSearchParams(s.location.search);t.set(o,e),s.replace(Object.assign({},s.location,{search:t.toString()}))}}),[o,s])]}function f(e){var t,a,n,s,o=e.defaultValue,i=e.queryString,l=void 0!==i&&i,u=e.groupId,d=p(e),f=(0,r.useState)((function(){return function(e){var t,a=e.defaultValue,n=e.tabValues;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(a){if(!m({value:a,tabValues:n}))throw new Error('Docusaurus error: The <Tabs> has a defaultValue "'+a+'" but none of its children has the corresponding value. Available values are: '+n.map((function(e){return e.value})).join(", ")+". If you intend to show no default tab, use defaultValue={null} instead.");return a}var r=null!=(t=n.find((function(e){return e.default})))?t:n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:o,tabValues:d})})),v=f[0],b=f[1],g=h({queryString:l,groupId:u}),k=g[0],y=g[1],D=(t=function(e){return e?"docusaurus.tab."+e:null}({groupId:u}.groupId),a=(0,c.Nk)(t),n=a[0],s=a[1],[n,(0,r.useCallback)((function(e){t&&s.set(e)}),[t,s])]),I=D[0],w=D[1],E=function(){var e=null!=k?k:I;return m({value:e,tabValues:d})?e:null}();return(0,r.useLayoutEffect)((function(){E&&b(E)}),[E]),{selectedValue:v,selectValue:(0,r.useCallback)((function(e){if(!m({value:e,tabValues:d}))throw new Error("Can't select invalid tab value="+e);b(e),y(e),w(e)}),[y,w,d]),tabValues:d}}var v=a(2389);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function g(e){var t=e.className,a=e.block,i=e.selectedValue,l=e.selectValue,u=e.tabValues,c=[],d=(0,o.o5)().blockElementScrollPositionUntilNextRender,p=function(e){var t=e.currentTarget,a=c.indexOf(t),n=u[a].value;n!==i&&(d(t),l(n))},m=function(e){var t,a=null;switch(e.key){case"Enter":p(e);break;case"ArrowRight":var n,r=c.indexOf(e.currentTarget)+1;a=null!=(n=c[r])?n:c[0];break;case"ArrowLeft":var s,o=c.indexOf(e.currentTarget)-1;a=null!=(s=c[o])?s:c[c.length-1]}
1null==(t=a)||t.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":a},t)},u.map((function(e){var t=e.value,a=e.label,o=e.attributes;return r.createElement("li",(0,n.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:function(e){return c.push(e)},onKeyDown:m,onClick:p},o,{className:(0,s.Z)("tabs__item",b.tabItem,null==o?void 0:o.className,{"tabs__item--active":i===t})}),null!=a?a:t)})))}function k(e){var t=e.lazy,a=e.children,n=e.selectedValue,s=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){var o=s.find((function(e){return e.props.value===n}));return o?(0,r.cloneElement)(o,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},s.map((function(e,t){return(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==n})})))}function y(e){var t=f(e);return r.createElement("div",{className:(0,s.Z)("tabs-container",b.tabList)},r.createElement(g,(0,n.Z)({},e,t)),r.createElement(k,(0,n.Z)({},e,t)))}function D(e){var t=(0,v.Z)();return r.createElement(y,(0,n.Z)({key:String(t)},e))}},7341:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>u,default:()=>f,frontMatter:()=>l,metadata:()=>c,toc:()=>p});var n=a(7462),r=a(3366),s=(a(7294),a(3905)),o=a(346),i=(a(4866),a(5162),["components"]),l={title:"Working with DIDs in Other Wallets"},u=void 0,c={unversionedId:"develop/dids/metamask",id:"develop/dids/metamask",title:"Working with DIDs in Other Wallets",description:"Developers can also work with decentralized identitiers (DIDs) using any standard interface, such ethers.js or web3.js and submit DID payloads through popular wallets such as MetaMask.",source:"@site/../docs/3.develop/dids/metamask.md",sourceDirName:"3.develop/dids",slug:"/develop/dids/metamask",permalink:"/develop/dids/metamask",draft:!1,editUrl:"https://github.com/elastos/Elastos.Wiki/edit/master/website/../docs/3.develop/dids/metamask.md",tags:[],version:"current",lastUpdatedBy:"racollette",lastUpdatedAt:1677279254,formattedLastUpdatedAt:"Feb 24, 2023",frontMatter:{title:"Working with DIDs in Other Wallets"},sidebar:"developSidebar",previous:{title:"Using the Essentials DID Toolkit",permalink:"/develop/dids/essentials"},next:{title:"Connect",permalink:"/develop/hive/connect"}},d={},p=[{value:"Publish DID Transaction",id:"publish-did-transaction",level:2}],m={toc:p},h="wrapper";function f(e){var t=e.components,a=(0,r.Z)(e,i);return(0,s.kt)(h,(0,n.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("p",null,"Developers can also work with decentralized identitiers (DIDs) using any standard interface, such ",(0,s.kt)("a",{parentName:"p",href:"https://docs.ethers.org/v5/"},"ethers.js")," or ",(0,s.kt)("a",{parentName:"p",href:"https://web3js.readthedocs.io/en/v1.8.2/#"},"web3.js")," and submit DID payloads through popular wallets such as ",(0,s.kt)("a",{parentName:"p",href:"https://metamask.io/"},"MetaMask"),"."),(0,s.kt)("admonition",{type:"caution"},(0,s.kt)("p",{parentName:"admonition"},"W3C-compliant DID transaction payloads are ",(0,s.kt)("strong",{parentName:"p"},"highly complex!")),(0,s.kt)("p",{parentName:"admonition"},"In order to generate them, developers can use one of the ",(0,s.kt)("a",{parentName:"p",href:"/sdk/welcome"},"identity SDKs"),"."),(0,s.kt)("p",{parentName:"admonition"},"This method is only recommended for advanced applications; most developers will prefer to use the ",(0,s.kt)("a",{parentName:"p",href:"/develop/dids/essentials"},"Essentials Connector")," for the user-friendly features.")),(0,s.kt)("h2",{id:"publish-did-transaction"},"Publish DID Transaction"),(0,s.kt)("p",null,"The example code below demonstrates how to publish a ",(0,s.kt)("a",{parentName:"p",href:"/learn/dids/intro"},"DID")," on the ",(0,s.kt)("a",{parentName:"p",href:"/learn/sidechains/eid"},"Elastos Identity (EID)")," chain using the ",(0,s.kt)("a",{parentName:"p",href:"https://docs.ethers.org/v5/"},"Ethers package")," and the ",(0,s.kt)("a",{parentName:"p",href:"https://github.com/elastos/Elastos.ELA.SideChain.EID/blob/master/core/vm/did/did.sol"},"official DID smart contract"),"."),(0,s.kt)("admonition",{type:"tip"},(0,s.kt)("p",{parentName:"admonition"},"DID functionality for the EID chain is built directly into the virtual machine, so the ",(0,s.kt)("a",{parentName:"p",href:"https://github.com/elastos/Elastos.ELA.SideChain.EID/blob/master/core/vm/did/did.sol"},"smart contract")," serves only as a general message passing interface and does not implement the full DID spec.")),(0,s.kt)(o.O2,{mdxType:"C
1odeTabs"},(0,s.kt)(o.SQ,{value:"\ud83c\udf10 JavaScript",language:"ts",mdxType:"Language"},(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="index.js"',title:'"index.js"'},'const { ethers } = require("ethers");\n\nconst provider = new ethers.providers.JsonRpcProvider(\n "https://api.elastos.io/eid" // set chain rpc url\n);\n\nconst contractAbi = [\n {\n inputs: [],\n stateMutability: "nonpayable",\n type: "constructor",\n },\n {\n inputs: [\n {\n internalType: "string",\n name: "data",\n type: "string",\n },\n ],\n name: "publishDidTransaction",\n outputs: [],\n stateMutability: "nonpayable",\n type: "function",\n },\n];\n\nconst contractAddress = "0x46E5936a9bAA167b3368F4197eDce746A66f7a7a"; // set DID contract address\n\nconst contract = new ethers.Contract(contractAddress, contractAbi, provider);\n\nconst keystore = "..."; // Add keystore\nconst password = "..."; // Add password\n\n// Decrypt account using the keystore and password\nconst wallet = ethers.Wallet.fromEncryptedJsonSync(keystore, password);\n\n// Create a DID\nconst createDID =\n \'{"header":{"specification":"elastos/did/1.0","operation":"create"},"payload":"..."}\'; // Add DID payload\n\n// Function to publish the DID transaction\nasync function publishDIDTransaction() {\n try {\n const result = await contract.publishDidTransaction(createDID, {\n from: wallet.address,\n });\n console.log("Transaction successful with transaction hash:", result.hash);\n } catch (err) {\n console.error("Error:", err);\n }\n}\n\npublishDIDTransaction();\n')))),(0,s.kt)("admonition",{type:"tip"},(0,s.kt)("p",{parentName:"admonition"},"Visit the API section for official DID implementation ",(0,s.kt)("a",{parentName:"p",href:"/api/contracts"},"addresses")," and public ",(0,s.kt)("a",{parentName:"p",href:"/api/providers"},"RPC URLs")," for the EID chain!")))}f.isMDXComponent=!0},4654:()=>{}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.