Hardhat-deploy: рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╡реЙрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 26 рдорд╛рд░реНрдЪ 2021  ┬╖  20рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: wighawag/hardhat-deploy

рдирдорд╕реНрдХрд╛рд░! рд╣рдо hardhat-deploy рдХреЛ https://github.com/ethereum-optimism/contracts рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣реЗ рд╣реИрдВ hardhat-deploy рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╡рд░реЛрдзрдХ рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд▓рдВрдмреЗ рд╕рдордп рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рдХреНрдпрд╛ рдпрд╣ рдЕрднреА рдмрд┐рд▓реНрдХреБрд▓ рд╕рдВрднрд╡ рд╣реИ? рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдХреНрдпрд╛ рдЖрд╢рд╛рд╡рд╛рдж рдЯреАрдо рдЗрд╕рдореЗрдВ рдХреБрдЫ рдорджрдж рдХрд░ рд╕рдХрддреА рд╣реИ?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @smartcontracts рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдорд╛рдзрд╛рди рд╕рдмрд╕реЗ рд╕реБрдВрджрд░ рд╣реИ:

const config = {
  networks: {
    goerli: {
      accounts: [
        {
          platform: "ledger",
          type: "hid",
          path: "m/44'/60'/0'/0/0"
        }
      ],
    }
  }
}

рдХреНрдпрд╛ рд╣рд╛рд░реНрдбрд╣реИрдЯ рдкрд░ рдХреЛрдИ рдЦреБрд▓рд╛ рдореБрджреНрджрд╛ рд╣реИ? рдореБрдЭреЗ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА

рд╕рднреА 20 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЕрд░реЗ @smartcontracts рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдРрд╕реА рд╕реБрд╡рд┐рдзрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдЦреБрдж рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдореИрдВ 3 рд╡рд┐рдХрд▓реНрдк рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ:

  1. рдПрдХ рд╕рдВрднрд╛рд╡рдирд╛ рдпрд╣ рд╣реИ рдХрд┐ hardhat-deploy-ethers рдПрдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рдИрдерд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рдХрд░реНрддрд╛ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рджреЗрдЧрд╛ (рдЗрд╕ рдкреАрдЖрд░ рдХреЛ рджреЗрдЦреЗрдВ рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╣рд╛рд░реНрдбрд╣реИрдЯ-рддреИрдирд╛рддреА рдореЗрдВ рд╣реА рдХрд░рдирд╛ рд╣реИ: https://github.com/wighawag/hardhat- рддреИрдирд╛рдд/рдкреБрд▓/62)ред рд▓реЗрдХрд┐рди рд╣рд╛рд░реНрдбрд╣реИрдЯ-рддреИрдирд╛рддреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рд╕рдмрд╕реЗ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рдХрд░реНрддрд╛ рдЖрджрд┐ рдХреЛ рддреБрд░рдВрдд рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ...

  2. рдореИрдВ рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдпрд╣ рд╣рд╛рд░реНрдбрд╣реИрдЯ рд╕реНрддрд░ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╣рд╛рд░реНрдбрд╣реИрдЯ рдкреНрд░рджрд╛рддрд╛ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдХреЗ рдпрд╣ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
    рдЗрд╕ рддрд░рд╣ рди рдХреЗрд╡рд▓ рд╣рд╛рд░реНрдбрд╣реИрдЯ-рддреИрдирд╛рддреА рд▓рд╛рдн рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдмрд▓реНрдХрд┐ рд╣рд░ рджреВрд╕рд░реЗ рдкреНрд▓рдЧрдЗрди рдФрд░ рдорд╛рдорд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

  3. рдЕрдиреНрдпрдерд╛, рдЗрд╕реЗ рд╣рд╛рд░реНрдбрд╣реИрдЯ-рддреИрдирд╛рддреА рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдирд╛ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдмрд╕ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
    рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рд╛рд░реНрдбрд╣реИрдЯ-рдбрд┐рдкреНрд▓реЙрдп рдЖрдкрдХреЛ рдЦрд╛рддреЛрдВ рдХрд╛ рдирд╛рдо рджреЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдпреЗ рдЦрд╛рддреЗ рдХреЗрд╡рд▓ рддрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрддреЗ рд╣реИрдВред
    рдЖрдк рдЙрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ from рдлрд╝реАрд▓реНрдб рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред
    рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, from рдлрд╝реАрд▓реНрдб рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд┐рдХрд▓реНрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╡реЙрд▓реЗрдЯ рд╣реИ рдпрд╛ рдирд╣реАрдВред
    рд▓реЗрдХрд┐рди рдЖрджрд░реНрд╢ рд░реВрдк рдореЗрдВ рдореИрдВ рдЗрд╕реЗ рдирд╛рдорд┐рдд рдЦрд╛рддреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╡рд░реНрддрдорд╛рди рдирд╛рдорд┐рдд рдЦрд╛рддрд╛ рд╕рдВрд░рдЪрдирд╛ рдЗрд╕реЗ рдЖрд╕рд╛рди рдирд╣реАрдВ рдмрдирд╛рддреА рд╣реИред рдПрдХ рд╡рд┐рдЪрд╛рд░ рдХреБрдЫ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдПрдбреНрд░реЗрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдкреНрд░реАрдкреЗрдиреНрдб рдХрд░рдирд╛ рдерд╛ , рдЬреИрд╕реЗ "

рдмрд╣реБрдд рд╣реА рд░реЛрдЪрдХред рдореЗрд░реА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ (рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ) рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рдЗрд╕ рдмрд╛рдд рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рдХрд░реНрддрд╛ рдПрдХ рд╕рд╛рджрд╛ рдЯреЗрдХреНрд╕реНрдЯ рдирд┐рдЬреА рдХреБрдВрдЬреА рдпрд╛ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╡реЙрд▓реЗрдЯ рд╣реИ рдпрд╛ рдирд╣реАрдВред рд╢рд╛рдпрдж рд╣рдо рдПрдХ рдЕрд▓рдЧ рдкреНрд▓рдЧрдЗрди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рдХреЛ рд╣рд╛рд░реНрдбрд╣реИрдЯ рдиреЗрдЯрд╡рд░реНрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ accounts рдлрд╝реАрд▓реНрдб рдореЗрдВ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╡реЙрд▓реЗрдЯ рдХрдиреЗрдХреНрд╢рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рддрдм рд╣рдо рдЗрд╕реЗ рдПрдХ рд▓реЗрдЬрд╝рд░рд╕рд┐рдЧреНрдирд░ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░ рд╕рдХрддреЗ

const config = {
  networks: {
    goerli: {
      accounts: [
        {
          platform: "ledger",
          type: "hid",
          path: "m/44'/60'/0'/0/0"
        }
      ],
    }
  }
}

рд╣рд╛рдБ, рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛ред рдЗрд╕реЗ рдпрдерд╛рд╕рдВрднрд╡ рдирд┐рдореНрдирддрдо рд╕реНрддрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрдирд╛

рдПрдХ рдореБрджреНрджрд╛ рдЬреЛ рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╡реЙрд▓реЗрдЯ рдмрд┐рдирд╛ рдкреБрд╖реНрдЯрд┐ рдХреЗ рдкрддреЗ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдкреНрд▓рдЧрдЗрди, рдЙрдкрдХрд░рдг рдЬреЛ рдЦрд╛рддреЗ рдХреА рд╕реВрдЪреА рд▓рд╛рддрд╛ рд╣реИ, рд╡рд╣ рд╡реЙрд▓реЗрдЯ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдЧрд╛, рдЖрджрд░реНрд╢ рдирд╣реАрдВред

рддреЛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЦрд╛рддрд╛ рд╡рд╕реНрддреБ рдХреЛ рдкрддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдпрджрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ рддреЛ рдпрд╣ рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рд╣реИ, рдпрд╛ рдХреБрдЫ рдФрд░

рддреЛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЦрд╛рддрд╛ рд╡рд╕реНрддреБ рдХреЛ рдкрддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдпрджрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ рддреЛ рдпрд╣ рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рд╣реИ, рдпрд╛ рдХреБрдЫ рдФрд░

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдпрд╣ рд╕рд╣реА рддрд░реАрдХрд╛ рд╣реИред рдореИрдВ рдХрд▓ рдЗрд╕рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ рдФрд░ рджреЗрдЦреВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдЗрд╕реЗ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВред

рдХреНрдпрд╛ рдЖрдк рдХрд┐рд╕реА рдЕрдиреНрдп рдореБрджреНрджреЗ рдкрд░ рдорджрдж рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд╣реИрдВ? рдЬрд╣рд╛рдБ рдореИрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ рд╡рд╣рд╛рдБ рдорджрдж рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА

рдЕрднреА рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рд▓рд╛рдкрддрд╛ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реВрдВ, рдФрд░ рдореИрдВ рдЗрд╕ рдкрд░ рдЗрд╕ рддрд░рд╣ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реВрдВ рддрд╛рдХрд┐ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реЛ :)

рдореИрдВ рдЕрдм рдЗрд╕рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рд╣рд╛рд░реНрдбрд╣реИрдЯ рдореЗрдВ рдирд┐рдЪрд▓реЗ рд╕реНрддрд░ рдкрд░ рдРрд╕рд╛ рдХрд░рдирд╛ рдХрд╛рдлреА рдХрд╛рдо рд╣реИред рдПрдХ рдЖрд╕рд╛рди рдЕрд╕реНрдерд╛рдпреА рд╕рдорд╛рдзрд╛рди hardhat-deploy рд▓рд┐рдП рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рдХрд░реНрддрд╛ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдкрддреЗ рдХреЗ рд╡рд┐рдкрд░реАрдд deploy рдореЗрдВ рдЬрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рд╣реЛрдЧрд╛ред рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддреБрдо рдХреНрдпрд╛ рдорд╣рд╕реВрд╕ рдХрд░ рд░рд╣реЗ рд╣реЛ? рдпрд╣ рд╣рдореЗрдВ рдирд┐рдореНрди рдХреА рддрд░реНрдЬ рдкрд░ рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛:

const signer = new LedgerSigner(hre.network.provider, 'default', hre.ethers.utils.defaultPath)
const result = await deploy('MyContract', {
  from: signer,
  args: [],
  log: true,
})

рдЕрд░реЗ @smartcontracts , рдореЗрд░рд╛ рдЬрд╡рд╛рдм рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ: https://github.com/wighawag/hardhat-deploy/pull/62
рдореВрд▓ рд░реВрдк рд╕реЗ рдореИрдВ рдПрдкреАрдЖрдИ рдкрдХреНрд╖ рдкрд░ рдИрдерд░ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣рд╛рд░реНрдбрд╣реИрдЯ-рддреИрдирд╛рддреА рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдореЗрд░реЗ рдЙрддреНрддрд░ рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕реЗ hardhat-deploy-ethers рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: https://github.com/wighawag/hardhat-deploy-ethers

рдЖрдкрдХреЛ рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬ рдХреА рдХрд┐рддрдиреА рдЬрд░реВрд░реА рдЬрд░реВрд░рдд рд╣реИ?

рдЕрд░реЗ @smartcontracts рдореИрдВрдиреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг (0.7.0-рдмреАрдЯрд╛.51) рдкрд░ рд▓реЗрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛

рдЕрдзрд┐рдХ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЦрд╛рддрд╛ рдмрд╣реА рдХрд╛ рд╕рдорд░реНрдерди рдХрд╛рдлреА рдЫреЛрдЯрд╛ рд▓рдЧрддрд╛ рд╣реИ (рд╢рд╛рдпрдж рдЗрд╕рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд: https://github.com/ethers-io/ethers.js/issues/1203)ред рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рддреБрдореНрд╣рд╛рд░реЗ рдкрд╛рд╕ рдореБрдЭрд╕реЗ рдмреЗрд╣рддрд░ рдореМрдХрд╛ рд╣реЛрдЧрд╛ред

рдореИрдВрдиреЗ рд╡рд┐рдХрд▓реНрдк 3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬреЛ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рдХрд╛рдлреА рдЖрд╕рд╛рди рдерд╛ред рдЖрдк рдореВрд▓ рд░реВрдк рд╕реЗ ledger://<address> рдЬреИрд╕реЗ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдПрдХ рдирд╛рдорд┐рдд рдЦрд╛рддрд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ: https://github.com/wighawag/template-ethereum-contracts/blob/d7eee3fc00b7e6a347a5ef2cd7718998254f2401/hardhat.config.ts#L15

рд╣рд╛рд░реНрдбрд╣реИрдЯ-рддреИрдирд╛рддреА рдЗрд╕реЗ рдкрддреЗ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЖрдк рдЕрднреА рднреА рдЗрд╕ рдирд╛рдорд┐рдд рдЦрд╛рддреЗ рдХреЛ рдПрдХ рдкрддреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░ рд╕рдХреЗрдВ, рд▓реЗрдХрд┐рди рджреГрд╢реНрдп рдХреЗ рдкреАрдЫреЗ рдпрд╣ рдЙрд╕ рдЦрд╛рддреЗ рдХреЛ рдПрдХ рд▓реЗрдЬрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рдХрд░реНрддрд╛ рд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╡реЙрд▓реЗрдЯ рдХрд╛ рдкрддрд╛ рдЪрд▓рдиреЗ рдкрд░ рдореИрдВрдиреЗ рд▓реЙрдЧ рднреА рдЬреЛрдбрд╝рд╛/.

рдЬрдм рддрдХ рд╣рд╛рд░реНрдбрд╣реИрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рдЗрд╕реЗ рдирд┐рдореНрди рд╕реНрддрд░ рдкрд░ рд╕рдВрднрд╛рд▓ рдирд╣реАрдВ рд╕рдХрддрд╛, рддрдм рддрдХ рдпрд╣ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдк рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдореБрдЭреЗ рдмрддрд╛рдУ

рдпрд╣ рд╢рд╛рдирджрд╛рд░ рд╣реИред рдЕрднреА рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ!

рдПрдХ рд▓реЗрди-рджреЗрди рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдХрд┐рд╕реА рддрд░рд╣ рдХреА рджреБрд░реНрдШрдЯрдирд╛ рд╣реЛ рдЧрдИред рд▓рдЧрддрд╛ рд╣реИ рдИрдерд░ рд▓реЗрдЬрд╝рд░ рдкреИрдХреЗрдЬ рдереЛрдбрд╝рд╛ рдЯреВрдЯрд╛ рд╣реБрдЖ рд╣реИред

@ рд╡рд┐рдШрд╡рд╛рдЧ рдЬрд▓реНрдж рд╣реА рдЦрд╛рддрд╛ рдмрд╣реА рд╕рдорд░реНрдерди рдХреЛ рджреЗрдЦрдХрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛ред рдореИрдВ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдпрд╣ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдХреБрдЫ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЬреЛ рдореЗрд░реЗ рдПрдХрд╛рдзрд┐рдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдЕрдВрддрд░ рд╣реИ

diff --git a/node_modules/hardhat-deploy/dist/src/helpers.js b/node_modules/hardhat-deploy/dist/src/helpers.js
index 3b588fa..67dce8f 100644
--- a/node_modules/hardhat-deploy/dist/src/helpers.js
+++ b/node_modules/hardhat-deploy/dist/src/helpers.js
@@ -290,6 +290,10 @@ function addHelpers(deploymentManager, partialExtension, network, getArtifact, s
         if (options.log || hardwareWallet) {
             print(`: deployed at ${deployment.address} with ${receipt === null || receipt === void 0 ? void 0 : receipt.gasUsed} gas\n`);
         }
+        if(hardwareWallet){
+            const __eth = await ethersSigner._eth
+            await __eth.transport.device.close()
+        }
         return Object.assign(Object.assign({}, deployment), { address, newlyDeployed: true });
     }
     async function deterministic(name, options) {
@@ -396,7 +400,7 @@ function addHelpers(deploymentManager, partialExtension, network, getArtifact, s
                 transaction = await provider.getTransaction(deployment.transactionHash);
             }
             if (transaction) {
-                const { ethersSigner } = await getOptionalFrom(options.from);
+                const { ethersSigner, hardwareWallet } = await getOptionalFrom(options.from);
                 const { artifact } = await getArtifactFromOptions(name, options);
                 const abi = artifact.abi;
                 const byteCode = linkLibraries(artifact, options.libraries);
@@ -421,9 +425,17 @@ function addHelpers(deploymentManager, partialExtension, network, getArtifact, s
                             ' not specified in new transaction, cant compare');
                     }
                     if (transaction[field] !== newTransaction[field]) {
+                        if(hardwareWallet){
+                            const __eth = await ethersSigner._eth
+                            await __eth.transport.device.close()
+                        }
                         return { differences: true, address: deployment.address };
                     }
                 }
+                if(hardwareWallet){
+                    const __eth = await ethersSigner._eth
+                    await __eth.transport.device.close()
+                }
                 return { differences: false, address: deployment.address };
             }
         }

@ рд╡рд┐рдШрд╡рд╛рдЧ рдореИрдВ рдкреАрдЖрд░ рднреЗрдЬ рд╕рдХрддрд╛ рд╣реВрдВ рдпрджрд┐ рдЖрдк рдореБрдЭреЗ рд╕рд╣реА рджрд┐рд╢рд╛ рдореЗрдВ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рджрд┐рд╢рд╛ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдореЗрд░рд╛ рдлрд┐рдХреНрд╕ рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдкреАрдЖрд░ рдореЗрдВ рдЬрд╛рдПрдЧрд╛; рдкреА

рдзрдиреНрдпрд╡рд╛рдж @rokso рдореИрдВ рдПрдХ рдирдЬрд╝рд░
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ ethers.js рд╣рд╛рд░реНрдбрд╡реЗрдпрд░-рд╡реЙрд▓реЗрдЯ рдкреИрдХреЗрдЬ рдХрд╛ рдмрд╛рдж рд╡рд╛рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рд╡реИрд╕реЗ рднреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

@рд╡рд┐рдШрд╡рд╛рдЧ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ рдХрд┐ ethers.js рдЗрд╕реЗ рдХреИрд╕реЗ рдареАрдХ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ close рдкрд░ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред ethers.js close рдкрджреНрдзрддрд┐ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдХреЗ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ

@rokso рдЕрдВрддрд░ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рддреИрдирд╛рддреА рдХреЗ рдмрд╛рдж рдмрдВрдж рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред
ethers.js tx рд╕реНрддрд░ рдкрд░ рдРрд╕рд╛ рд╣реА рдХрд░ рд╕рдХрддрд╛ рд╣реИ

@ рд╡рд┐рдШрд╡рд╛рдЧ рд╣рд╛рдБ рдЬреЛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╣рд░ рд▓реЗрдирджреЗрди рдХреЗ рд▓рд┐рдП рдирдпрд╛ рдХрдиреЗрдХреНрд╢рди рдЦреЛрд▓рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рд╕рдорд╛рдзрд╛рди рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдирдпрд╛ рдХрдиреЗрдХреНрд╢рди рдЦреЛрд▓ рд░рд╣реЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @smartcontracts рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдорд╛рдзрд╛рди рд╕рдмрд╕реЗ рд╕реБрдВрджрд░ рд╣реИ:

const config = {
  networks: {
    goerli: {
      accounts: [
        {
          platform: "ledger",
          type: "hid",
          path: "m/44'/60'/0'/0/0"
        }
      ],
    }
  }
}

рдХреНрдпрд╛ рд╣рд╛рд░реНрдбрд╣реИрдЯ рдкрд░ рдХреЛрдИ рдЦреБрд▓рд╛ рдореБрджреНрджрд╛ рд╣реИ? рдореБрдЭреЗ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА

рдЕрд░реЗ рд╕рдм, рдмрд╕ рдЗрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдХреНрдпрд╛ рдпрд╣ рд╣рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ? рдореИрдВ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реВрдВ: рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ namedAccounts рдХреЗ рднреАрддрд░ ' ledger://0x00000000000000addr00000 ' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕реЗрдЯрдЕрдк рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп /bindings.js:126 err = new Error( ^ Error: Could not locate the bindings file. Tried: ред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдИрдерд░ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░-рд╡реЙрд▓реЗрдЯ рдкреИрдХреЗрдЬ рдиреЗ рдЕрднреА рддрдХ рдЗрд╕рдХреЗ рдореБрджреНрджреЛрдВ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИ: https://github.com/ethers-io/ethers.js/issues/1440#issuecomment -816554584

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

gitpusha picture gitpusha  ┬╖  10рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

lepidotteri picture lepidotteri  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

tennox picture tennox  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

lcswillems picture lcswillems  ┬╖  14рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

gitpusha picture gitpusha  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ