(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64758],{10094:function(e,i,s){(window.__NEXT_P=window.__NEXT_P||[]).push(["/en/network/nodes/validator-node/connect-nodes/connect-to-aptos-network",function(){return s(12372)}])},12372:function(e,i,s){"use strict";s.r(i),s.d(i,{useTOC:function(){return o}});var n=s(31549),t=s(82910),r=s(1117),a=s(46977),l=s(13844),h=s(47023),d=s(83185);function o(e){return[{value:"Initialize stake pool",id:"initialize-stake-pool",depth:3},{value:"Join validator set",id:"join-validator-set",depth:3},{value:"Update identities",id:"update-identities",depth:3},{value:"Bootstrap your nodes",id:"bootstrap-your-nodes",depth:3},{value:"Initialize the stake pool",id:"initialize-the-stake-pool",depth:2},{value:"Join the validator set",id:"join-the-validator-set",depth:2},{value:"1. Initialize the Aptos CLI",id:"1-initialize-the-aptos-cli",depth:3},{value:"2. Check your account balance",id:"2-check-your-account-balance",depth:3},{value:"3. Update on-chain network addresses",id:"3-update-on-chain-network-addresses",depth:3},{value:"4. Update on-chain consensus key",id:"4-update-on-chain-consensus-key",depth:3},{value:"5. Join the validator set",id:"5-join-the-validator-set",depth:3},{value:"6. Check the validator set",id:"6-check-the-validator-set",depth:3},{value:"Update identities",id:"update-identities-1",depth:2},{value:"Using Source Code",id:"using-source-code",depth:3},{value:"Using Docker",id:"using-docker",depth:3},{value:"Using Terraform",id:"using-terraform",depth:3},{value:"Bootstrap your nodes",id:"bootstrap-your-nodes-1",depth:2},{value:"Next steps",id:"next-steps",depth:2}]}i.default=(0,t.c)(function(e){let{toc:i=o(e)}=e,s={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",span:"span",strong:"strong",...(0,a.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{children:"Connect to a Network"}),"\n",(0,n.jsx)(s.p,{children:"This document describes how to connect your validator and validator fullnode (VFN) to an Aptos network."}),"\n",(0,n.jsx)(l.U,{type:"warning",children:(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.strong,{children:"MINIMUM STAKING REQUIREMENTS"}),(0,n.jsx)("br",{}),"\nYou should only follow these instructions if your validator is able to meet the minimum\n",(0,n.jsx)(s.a,{href:"../../../blockchain/staking#minimum-and-maximum-stake",children:"staking requirements"})," for the\nnetwork. The current required minimum staking requirement is 1 Million APT tokens."]})}),"\n",(0,n.jsx)(s.p,{children:"At a high-level, there are four steps required to connect your nodes to an Aptos network:"}),"\n",(0,n.jsxs)(h.R,{children:[(0,n.jsx)(s.h3,{id:i[0].id,children:i[0].value}),(0,n.jsx)(s.p,{children:"First, you will need to initialize the stake pool."}),(0,n.jsx)(s.h3,{id:i[1].id,children:i[1].value}),(0,n.jsx)(s.p,{children:"Second, you will need to join the validator set."}),(0,n.jsx)(s.h3,{id:i[2].id,children:i[2].value}),(0,n.jsx)(s.p,{children:"Third, you will need to update your node identity configurations to match the pool address."}),(0,n.jsx)(s.h3,{id:i[3].id,children:i[3].value}),(0,n.jsx)(s.p,{children:"Finally, you will need to bootstrap your nodes, so they can connect to the network and start syncing."})]}),"\n",(0,n.jsx)(s.p,{children:"We will go through each of these steps in detail below."}),"\n",(0,n.jsx)(s.h2,{id:i[4].id,children:i[4].value}),"\n",(0,n.jsxs)(s.p,{children:["To begin, you will need to initialize the staking pool for your nodes. There are two types of pools you\ncan initialize, a staking pool or a delegation pool. You can read more about the differences between these\npools in the ",(0,n.jsx)(s.a,{href:"../../../blockchain/staking",children:"Staking"})," and ",(0,n.jsx)(s.a,{href:"../../../blockchain/delegated-staking",children:"Delegated Staking"})," sections."]}),"\n",(0,n.jsxs)(s.p,{children:["To initialize a staking pool, follow the instructions in\n",(0,n.jsx)(s.a,{href:"staking-pool-operations#initialize-a-staking-pool",children:"staking pool operations"}),". Otherwise,\nto initialize a delegation pool, follow the instructions in\n",(0,n.jsx)(s.a,{href:"delegation-pool-operations#initialize-a-delegation-pool",children:"delegation pool operations"}),"."]}),"\n",(0,n.jsx)(s.h2,{id:i[5].id,children:i[5].value}),"\n",(0,n.jsx)(s.p,{children:"Next, you will need to join the validator set. Follow the steps below:"}),"\n",(0,n.jsx)(l.U,{type:"warning",children:(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.strong,{children:"MAINNET VS TESTNET"}),(0,n.jsx)("br",{}),"\nThe commands shown below are for the Aptos mainnet. If you are connecting to a different\nnetwork, you will need to change the ",(0,n.jsx)(s.code,{children:"--network"})," value in the commands accordingly. You can view the\nvalues in ",(0,n.jsx)(s.a,{href:"../../networks",children:"Aptos Blockchain Networks"})," to see how profiles can be configured based on the network."]})}),"\n",(0,n.jsx)(s.h3,{id:i[6].id,children:i[6].value}),"\n",(0,n.jsxs)(s.p,{children:["First, initialize the Aptos CLI with your operator account private key. This can be found in your ",(0,n.jsx)(s.code,{children:"private-keys.yaml"})," file\nunder the entry ",(0,n.jsx)(s.code,{children:"account_private_key"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["Replace ",(0,n.jsx)(s.code,{children:"<operator_account_private_key>"})," with the value from the file in the command below:"]}),"\n",(0,n.jsx)(s.pre,{icon:d.Fx,tabIndex:"0","data-language":"bash","data-word-wrap":"","data-filename":"Terminal","data-copy":"",children:(0,n.jsxs)(s.code,{children:[(0,n.jsxs)(s.span,{children:[(0,n.jsx)(s.span,{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},children:"aptos"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:" init"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:" --profile"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:" mainnet-operator"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:" \\"})]}),"\n",(0,n.jsxs)(s.span,{children:[(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"   --network"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:" mainnet"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:" \\"})]}),"\n",(0,n.jsxs)(s.span,{children:[(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"   --private-key"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:" <"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:"operator_account_private_ke"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"y"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:">"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:" \\"})]}),"\n",(0,n.jsx)(s.span,{children:(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"   --skip-faucet"})})]})}),"\n",(0,n.jsx)(s.h3,{id:i[7].id,children:i[7].value}),"\n",(0,n.jsx)(s.p,{children:"Next, make sure you have enough funds to pay for transaction gas on the network. You can check this using the CLI, by\nrunning the command below:"}),"\n",(0,n.jsx)(s.pre,{icon:d.Fx,tabIndex:"0","data-language":"bash","data-word-wrap":"","data-filename":"Terminal","data-copy":"",children:(0,n.jsx)(s.code,{children:(0,n.jsxs)(s.span,{children:[(0,n.jsx)(s.span,{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},children:"aptos"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:" account"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:" list"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:" --profile"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:" mainnet-operator"})]})})}),"\n",(0,n.jsx)(s.p,{children:"This will show you the coin balance you have in the validator account. You will see an output like below:"}),"\n",(0,n.jsx)(s.pre,{tabIndex:"0","data-language":"json","data-word-wrap":"","data-filename":"Terminal","data-copy":"",children:(0,n.jsxs)(s.code,{children:[(0,n.jsxs)(s.span,{children:[(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:'"coin"'}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:": {"})]}),"\n",(0,n.jsxs)(s.span,{children:[(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:'   "value"'}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:": "}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:'"5000"'})]}),"\n",(0,n.jsx)(s.span,{children:(0,n.jsx)(s.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"}"})})]})}),"\n",(0,n.jsx)(s.h3,{id:i[8].id,children:i[8].value}),"\n",(0,n.jsx)(s.p,{children:"Next, you will need to update the network addresses for your validator and VFN. This is required to ensure that your nodes\nare able to connect to other peers in the network. First, fetch the pool address for your nodes, by running the command below.\nNote: the owner address is the address of the account that owns the stake pool, and was used to initialize the stake pool."}),"\n",(0,n.jsx)(s.pre,{icon:d.Fx,tabIndex:"0","data-language":"bash","data-word-wrap":"","data-filename":"Terminal","data-copy":"",children:(0,n.jsx)(s.code,{children:(0,n.jsxs)(s.span,{children:[(0,n.jsx)(s.span,{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},children:"aptos"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:" node"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:" get-stake-pool"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:" --owner-address"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:" <"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:"owner_addres"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"s"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:">"})]})})}),"\n",(0,n.jsxs)(s.p,{children:["Using the pool address from the command above, you will need to update the network addresses for your nodes. You can\ndo this by running the command below. Note that it requires the ",(0,n.jsx)(s.code,{children:"operator.yaml"})," file, which was created when you first\ndeployed your nodes."]}),"\n",(0,n.jsx)(s.pre,{icon:d.Fx,tabIndex:"0","data-language":"bash","data-word-wrap":"","data-filename":"Terminal","data-copy":"",children:(0,n.jsxs)(s.code,{children:[(0,n.jsxs)(s.span,{children:[(0,n.jsx)(s.span,{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},children:"aptos"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:" node"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:" update-validator-network-addresses"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"  \\"})]}),"\n",(0,n.jsxs)(s.span,{children:[(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"   --pool-address"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:" <"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:"pool-addres"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"s"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:">"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:" \\"})]}),"\n",(0,n.jsxs)(s.span,{children:[(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"   --operator-config-file"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:" ~/"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"$WORKSPACE"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:"/"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"$USERNAME"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:"/operator.yaml"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:" \\"})]}),"\n",(0,n.jsxs)(s.span,{children:[(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"   --profile"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:" mainnet-operator"})]})]})}),"\n",(0,n.jsx)(l.U,{type:"info",children:(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.strong,{children:"UPDATING THE NETWORK ADDRESSES"}),(0,n.jsx)("br",{}),"\nUpdating your network addresses on-chain requires waiting for the next epoch to begin. This is because the network\naddresses are updated at the end of the current epoch. Before the next epoch, your nodes will not be able to connect\nto other peers in the network."]})}),"\n",(0,n.jsx)(s.h3,{id:i[9].id,children:i[9].value}),"\n",(0,n.jsxs)(s.p,{children:["Next, you will need to update the consensus key for your nodes. This is required to ensure that your nodes are able to\nparticipate in consensus. You can do this by running the command below. Note that it requires the pool address and\nthe ",(0,n.jsx)(s.code,{children:"operator.yaml"})," file (similar to above)."]}),"\n",(0,n.jsx)(s.pre,{icon:d.Fx,tabIndex:"0","data-language":"bash","data-word-wrap":"","data-filename":"Terminal","data-copy":"",children:(0,n.jsxs)(s.code,{children:[(0,n.jsxs)(s.span,{children:[(0,n.jsx)(s.span,{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},children:"aptos"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:" node"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:" update-consensus-key"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"  \\"})]}),"\n",(0,n.jsxs)(s.span,{children:[(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"   --pool-address"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:" <"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:"pool-addres"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"s"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:">"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:" \\"})]}),"\n",(0,n.jsxs)(s.span,{children:[(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"   --operator-config-file"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:" ~/"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"$WORKSPACE"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:"/"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"$USERNAME"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:"/operator.yaml"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:" \\"})]}),"\n",(0,n.jsxs)(s.span,{children:[(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"   --profile"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:" mainnet-operator"})]})]})}),"\n",(0,n.jsx)(l.U,{type:"info",children:(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.strong,{children:"UPDATING THE CONSENSUS KEY"}),(0,n.jsx)("br",{}),"\nUpdating your consensus key on-chain requires waiting for the next epoch to begin. This is because the consensus key\nis updated at the end of the current epoch. Before the next epoch, your nodes will not be able to participate in consensus."]})}),"\n",(0,n.jsx)(s.h3,{id:i[10].id,children:i[10].value}),"\n",(0,n.jsx)(s.p,{children:"Finally, you will need to join the validator set. You can do this by running the command below:"}),"\n",(0,n.jsx)(s.pre,{icon:d.Fx,tabIndex:"0","data-language":"bash","data-word-wrap":"","data-filename":"Terminal","data-copy":"",children:(0,n.jsxs)(s.code,{children:[(0,n.jsxs)(s.span,{children:[(0,n.jsx)(s.span,{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},children:"aptos"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:" node"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:" join-validator-set"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:" \\"})]}),"\n",(0,n.jsxs)(s.span,{children:[(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"   --pool-address"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:" <"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:"pool-addres"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"s"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:">"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:" \\"})]}),"\n",(0,n.jsxs)(s.span,{children:[(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"   --profile"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:" mainnet-operator"})]})]})}),"\n",(0,n.jsx)(s.p,{children:"The validator set is updated at the end of every epoch. You will need to wait for the next epoch to begin before your\nvalidator node is able to join the validator set."}),"\n",(0,n.jsx)(l.U,{type:"info",children:(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.strong,{children:"IDENTIFYING THE NEXT EPOCH"}),(0,n.jsx)("br",{}),"\nYou can identify the next epoch by checking the ",(0,n.jsx)(s.a,{href:"https://explorer.aptoslabs.com/validators/all?network=mainnet",children:"Aptos Explorer"})," or by running the command ",(0,n.jsx)(s.code,{children:"aptos node get-stake-pool"}),"."]})}),"\n",(0,n.jsx)(s.h3,{id:i[11].id,children:i[11].value}),"\n",(0,n.jsxs)(s.p,{children:["When you execute the command to join the validator set, your validator will be in a “Pending Active” state until the\nnext epoch occurs. You can run the command below to look for your validator in the ",(0,n.jsx)(s.code,{children:"pending_active"})," list."]}),"\n",(0,n.jsx)(s.pre,{icon:d.Fx,tabIndex:"0","data-language":"bash","data-word-wrap":"","data-filename":"Terminal","data-copy":"",children:(0,n.jsx)(s.code,{children:(0,n.jsxs)(s.span,{children:[(0,n.jsx)(s.span,{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},children:"aptos"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:" node"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:" show-validator-set"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:" --profile"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:" mainnet-operator"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:" |"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},children:" jq"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:" -r"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:" '.Result.pending_active'"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:" |"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},children:" grep"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:" <"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:"pool_addres"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"s"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:">"})]})})}),"\n",(0,n.jsxs)(s.p,{children:["When the next epoch occurs, the node will be moved into ",(0,n.jsx)(s.code,{children:"active_validators"})," list. Run the command\nbelow to see your validator in the “active_validators” list:"]}),"\n",(0,n.jsx)(s.pre,{icon:d.Fx,tabIndex:"0","data-language":"bash","data-word-wrap":"","data-filename":"Terminal","data-copy":"",children:(0,n.jsx)(s.code,{children:(0,n.jsxs)(s.span,{children:[(0,n.jsx)(s.span,{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},children:"aptos"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:" node"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:" show-validator-set"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:" --profile"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:" mainnet-operator"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:" |"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},children:" jq"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:" -r"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:" '.Result.active_validators'"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:" |"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},children:" grep"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:" <"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:"pool_addres"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"s"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:">"})]})})}),"\n",(0,n.jsx)(s.h2,{id:i[12].id,children:i[12].value}),"\n",(0,n.jsx)(s.p,{children:"After joining the validator set, you will need to update your node identity configuration files to match the pool address.\nThis is required to ensure that your nodes are able to connect to other peers in the network."}),"\n",(0,n.jsx)(l.U,{type:"warning",children:(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.strong,{children:"UPDATING THE POOL ADDRESS"}),(0,n.jsx)("br",{}),"\nIt is a common error to forget to update the pool address in the node identity configurations. If you do not\nupdate the pool address for ",(0,n.jsx)(s.strong,{children:"both your validator and VFN identity files"}),", your nodes will not be able to connect to\nother peers in the network."]})}),"\n",(0,n.jsx)(s.p,{children:"Follow the steps below to update your node identity configurations, depending on the deployment method you used."}),"\n",(0,n.jsx)(s.h3,{id:i[13].id,children:i[13].value}),"\n",(0,n.jsx)(s.p,{children:"If you used the source code to deploy your nodes, follow these steps:"}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["Stop your validator and VFN and remove the data directory from both nodes. Make sure to remove the\n",(0,n.jsx)(s.code,{children:"secure-data.json"})," file on the validator, too. You can see the location of the ",(0,n.jsx)(s.code,{children:"secure-data.json"})," file in your\nvalidator’s configuration file."]}),"\n",(0,n.jsxs)(s.li,{children:["Update your ",(0,n.jsx)(s.code,{children:"account_address"})," in the ",(0,n.jsx)(s.code,{children:"validator-identity.yaml"})," and ",(0,n.jsx)(s.code,{children:"validator-fullnode-identity.yaml"})," files to your ",(0,n.jsx)(s.strong,{children:"pool address"}),". Do not change anything else."]}),"\n",(0,n.jsx)(s.li,{children:"Restart the validator and VFN."}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:i[14].id,children:i[14].value}),"\n",(0,n.jsx)(s.p,{children:"If you used Docker to deploy your nodes, follow these steps:"}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["Stop your node and remove the data volumes: ",(0,n.jsx)(s.code,{children:"docker compose down --volumes"}),". Make sure to remove the\n",(0,n.jsx)(s.code,{children:"secure-data.json"})," file on the validator, too. You can see the location of the ",(0,n.jsx)(s.code,{children:"secure-data.json"})," file in your\nvalidator’s configuration file."]}),"\n",(0,n.jsxs)(s.li,{children:["Update your ",(0,n.jsx)(s.code,{children:"account_address"})," in the ",(0,n.jsx)(s.code,{children:"validator-identity.yaml"})," and ",(0,n.jsx)(s.code,{children:"validator-fullnode-identity.yaml"})," files to your ",(0,n.jsx)(s.strong,{children:"pool address"}),".\nDo not change anything else."]}),"\n",(0,n.jsxs)(s.li,{children:["Restart the nodes with: ",(0,n.jsx)(s.code,{children:"docker compose up"})]}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:i[15].id,children:i[15].value}),"\n",(0,n.jsx)(s.p,{children:"If you used Terraform to deploy your nodes (e.g., for AWS, Azure or GCP), follow these steps:"}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Increase the ",(0,n.jsx)(s.code,{children:"era"})," number in your Terraform configuration. When this configuration is applied, it will wipe the data."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Set the ",(0,n.jsx)(s.code,{children:"enable_monitoring"})," variable in your terraform module. For example:"]}),"\n",(0,n.jsx)(s.pre,{icon:d.C2,tabIndex:"0","data-language":"terraform","data-word-wrap":"","data-filename":"config.tf","data-copy":"",children:(0,n.jsxs)(s.code,{children:[(0,n.jsxs)(s.span,{children:[(0,n.jsx)(s.span,{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},children:"module"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:' "aptos-node"'}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" {"})]}),"\n",(0,n.jsx)(s.span,{children:(0,n.jsx)(s.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"  ..."})}),"\n",(0,n.jsxs)(s.span,{children:[(0,n.jsx)(s.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"  enable_monitoring"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"           ="}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:" true"})]}),"\n",(0,n.jsxs)(s.span,{children:[(0,n.jsx)(s.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"  utility_instance_num"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"        ="}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:" 3"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"},children:"  # this will add one more utility instance to run monitoring component"})]}),"\n",(0,n.jsx)(s.span,{children:(0,n.jsx)(s.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"}"})})]})}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Apply the changes with: ",(0,n.jsx)(s.code,{children:"terraform apply"})," You will see a new pod getting created. Run ",(0,n.jsx)(s.code,{children:"kubectl get pods"})," to check."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsx)(s.p,{children:"Find the IP/DNS for the monitoring load balancer, using:"}),"\n",(0,n.jsx)(s.pre,{icon:d.Fx,tabIndex:"0","data-language":"bash","data-word-wrap":"","data-filename":"Terminal","data-copy":"",children:(0,n.jsx)(s.code,{children:(0,n.jsxs)(s.span,{children:[(0,n.jsx)(s.span,{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},children:"kubectl"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:" get"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:" svc"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" ${WORKSPACE}"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:"-mon-aptos-monitoring"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:" --output"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:" jsonpath='{.status.loadBalancer.ingress[0]}'"})]})})}),"\n",(0,n.jsxs)(s.p,{children:["You will be able to access the Terraform dashboard on ",(0,n.jsx)(s.code,{children:"http://<ip/DNS>"}),"."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Pull the latest of the terraform module ",(0,n.jsx)(s.code,{children:"terraform get -update"}),", and then apply the Terraform: ",(0,n.jsx)(s.code,{children:"terraform apply"}),"."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Download the ",(0,n.jsx)(s.code,{children:"genesis.blob"})," and ",(0,n.jsx)(s.code,{children:"waypoint.txt"})," files for your network. See ",(0,n.jsx)(s.a,{href:"../../configure/node-files-all-networks",children:"Node Files"})," for locations and commands to download these files."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Update your ",(0,n.jsx)(s.code,{children:"account_address"})," in the ",(0,n.jsx)(s.code,{children:"validator-identity.yaml"})," and ",(0,n.jsx)(s.code,{children:"validator-fullnode-identity.yaml"})," files to your ",(0,n.jsx)(s.strong,{children:"pool address"}),". Do not change anything else."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Recreate the secrets. Make sure the secret name matches your ",(0,n.jsx)(s.code,{children:"era"})," number, e.g. if you have ",(0,n.jsx)(s.code,{children:"era = 3"}),", then you should replace the secret name to be:"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.pre,{icon:d.Fx,tabIndex:"0","data-language":"bash","data-word-wrap":"","data-filename":"Terminal","data-copy":"",children:(0,n.jsx)(s.code,{children:(0,n.jsx)(s.span,{children:(0,n.jsx)(s.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"${WORKSPACE}-aptos-node-0-genesis-e3"})})})}),"\n",(0,n.jsx)(s.pre,{icon:d.Fx,tabIndex:"0","data-language":"bash","data-word-wrap":"","data-filename":"Terminal","data-copy":"",children:(0,n.jsxs)(s.code,{children:[(0,n.jsxs)(s.span,{children:[(0,n.jsx)(s.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"export"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" WORKSPACE"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"=<"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"your workspace name"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:">"})]}),"\n",(0,n.jsx)(s.span,{children:" "}),"\n",(0,n.jsxs)(s.span,{children:[(0,n.jsx)(s.span,{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},children:"kubectl"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:" create"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:" secret"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:" generic"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" ${WORKSPACE}"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:"-aptos-node-0-genesis-e2"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:" \\"})]}),"\n",(0,n.jsxs)(s.span,{children:[(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"    --from-file=genesis.blob=genesis.blob"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:" \\"})]}),"\n",(0,n.jsxs)(s.span,{children:[(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"    --from-file=waypoint.txt=waypoint.txt"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:" \\"})]}),"\n",(0,n.jsxs)(s.span,{children:[(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"    --from-file=validator-identity.yaml=keys/validator-identity.yaml"}),(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:" \\"})]}),"\n",(0,n.jsx)(s.span,{children:(0,n.jsx)(s.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"    --from-file=validator-full-node-identity.yaml=keys/validator-full-node-identity.yaml"})})]})}),"\n",(0,n.jsx)(s.h2,{id:i[16].id,children:i[16].value}),"\n",(0,n.jsx)(s.p,{children:"After joining the validator set and updating your node identity configurations to match the pool address,\nyou will need to bootstrap your nodes to connect to the network. To do this, follow the steps below:"}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["Start the VFN. The VFN will connect to the network and start syncing. See ",(0,n.jsx)(s.a,{href:"../../configure/state-sync",children:"State Synchronization"})," for more information."]}),"\n",(0,n.jsx)(s.li,{children:"Once the VFN is synced, restart the validator. It will sync from the VFN and then connect to other validators\nin the network and start participating in consensus."}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"Once both of these steps are complete, your nodes will be connected to the network and participating in consensus."}),"\n",(0,n.jsx)(s.h2,{id:i[17].id,children:i[17].value}),"\n",(0,n.jsxs)(s.p,{children:["Congratulations! You have successfully connected your nodes to the Aptos network. To verify that your nodes are running\ncorrectly, visit the ",(0,n.jsx)(s.a,{href:"../verify-nodes/node-liveness-criteria",children:"Node Health"})," document. This document describes how you can verify and\nmonitor the health of your validator and VFN, including an initial node verification section."]})]})},"/en/network/nodes/validator-node/connect-nodes/connect-to-aptos-network",{filePath:"pages/en/network/nodes/validator-node/connect-nodes/connect-to-aptos-network.mdx",timestamp:1728425436e3,pageMap:r.v,frontMatter:{title:"Connect to a Network"},title:"Connect to a Network"},"undefined"==typeof RemoteContent?o:RemoteContent.useTOC)},13844:function(e,i,s){"use strict";s.d(i,{U:function(){return h}});var n=s(31549),t=s(78364),r=s(83185);let a={default:"\uD83D\uDCA1",error:"\uD83D\uDEAB",info:(0,n.jsx)(r.AV,{className:"_mt-1"}),warning:"⚠️"},l={default:(0,t.Z)("_border-orange-100 _bg-orange-50 _text-orange-800 dark:_border-orange-400/30 dark:_bg-orange-400/20 dark:_text-orange-300"),error:(0,t.Z)("_border-red-200 _bg-red-100 _text-red-900 dark:_border-red-200/30 dark:_bg-red-900/30 dark:_text-red-200"),info:(0,t.Z)("_border-blue-200 _bg-blue-100 _text-blue-900 dark:_border-blue-200/30 dark:_bg-blue-900/30 dark:_text-blue-200"),warning:(0,t.Z)("_border-yellow-100 _bg-yellow-50 _text-yellow-900 dark:_border-yellow-200/30 dark:_bg-yellow-700/30 dark:_text-yellow-200")};function h({children:e,type:i="default",emoji:s=a[i]}){return(0,n.jsxs)("div",{className:(0,t.Z)("nextra-callout _overflow-x-auto _mt-6 _flex _rounded-lg _border _py-2 ltr:_pr-4 rtl:_pl-4","contrast-more:_border-current contrast-more:dark:_border-current",l[i]),children:[(0,n.jsx)("div",{className:"_select-none _text-xl ltr:_pl-3 ltr:_pr-2 rtl:_pr-3 rtl:_pl-2",style:{fontFamily:'"Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"'},children:s}),(0,n.jsx)("div",{className:"_w-full _min-w-0 _leading-7",children:e})]})}},47023:function(e,i,s){"use strict";s.d(i,{R:function(){return a}});var n=s(31549),t=s(78364),r=s(44194);function a({children:e,className:i,style:s,...a}){let l=(0,r.useId)().replaceAll(":","");return(0,n.jsx)("div",{className:(0,t.Z)("nextra-steps _ms-4 _mb-12 _border-s _border-gray-200 _ps-6","dark:_border-neutral-800",i),style:{...s,"--counter-id":l},...a,children:e})}},82910:function(e,i,s){"use strict";s.d(i,{c:function(){return h}});var n=s(31549),t=s(74271),r=s(14553),a=s(55754),l=s(46977);function h(e,i,s,n){let r=globalThis[t.ud];return r.route=i,r.pageMap=s.pageMap,r.context[i]={Content:e,pageOpts:s,useTOC:n},d}function d({__nextra_pageMap:e=[],__nextra_dynamic_opts:i,...s}){let l=globalThis[t.ud],{Layout:h,themeConfig:d}=l,{route:c,locale:k}=(0,r.t)(),p=l.context[c];if(!p)throw Error(`No content found for the "${c}" route. Please report it as a bug.`);let{pageOpts:x,useTOC:j,Content:u}=p;if(c.startsWith("/["))x.pageMap=e;else for(let{route:i,children:s}of e){let e=i.split("/").slice(k?2:1);(function e(i,[s,...n]){for(let t of i)if("children"in t&&s===t.name)return n.length?e(t.children,n):t})(x.pageMap,e).children=s}if(i){let{title:e,frontMatter:s}=i;x={...x,title:e,frontMatter:s}}return(0,n.jsx)(h,{themeConfig:d,pageOpts:x,pageProps:s,children:(0,n.jsx)(a.F,{value:s,children:(0,n.jsx)(o,{useTOC:j,children:(0,n.jsx)(u,{...s})})})})}function o({children:e,useTOC:i}){let{wrapper:s}=(0,l.a)();return(0,n.jsx)(c,{useTOC:i,wrapper:s,children:e})}function c({children:e,useTOC:i,wrapper:s,...t}){let r=i(t);return s?(0,n.jsx)(s,{toc:r,children:e}):e}}},function(e){e.O(0,[68889,1117,92888,49774,40179],function(){return e(e.s=10094)}),_N_E=e.O()}]);