Hardhat-deploy: рдкреНрд░реЙрдХреНрд╕реА рдЕрдиреБрдмрдВрдзреЛрдВ рдХреЛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рддреНрдпрд╛рдкрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 24 рдЬреВрди 2021  ┬╖  2рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: wighawag/hardhat-deploy

рдлрд┐рд▓рд╣рд╛рд▓ рдпрджрд┐ рдЖрдк рдПрдХ рдРрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдкреНрд░реЙрдХреНрд╕реА рдЕрдиреБрдмрдВрдз рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЕрдорд╛рдиреНрдп рд╕рдВрд░рдЪрдирд╛ рд╣реИ рддреЛ рдпрд╣ рдЕрднреА рднреА рд╕рдлрд▓ рд╣реЛрдЧрд╛ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрдиреБрдмрдВрдз рдареАрдХ рддреИрдирд╛рдд рдХрд░реЗрдЧрд╛:

contract Foo {
  uint public b;
  uint public c = 5;

  constructor(a uint) { 
    b = a; 
  }
}

рд▓реЗрдХрд┐рди рдкреНрд░реЙрдХреНрд╕реА рд╕реЗ рддреИрдирд╛рдд рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдпрд╣ рдЕрдиреБрдмрдВрдз рдЕрдорд╛рдиреНрдп рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд░рд┐рд▓реЗ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдкреНрд░реЙрдХреНрд╕реА рдореЗрдВ c рдпрд╛ b рдЪрд░ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕реЗ рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рддреЛ рдЙрд╕реЗ рдпрд╣рд╛рдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрдиреА рдЪрд╛рд╣рд┐рдПред

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

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

рдкреБрд░рд╛рдирд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:

contract Foo { 
  uint public b = 5;
};

рдирдпрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:

// Incorrect
contract Bar { 
  uint public c; // Collision here! - value is actually set to 5 not 0
}

// Correct
contract Bar {
  uint public b; // value is 5 as expected
  uint public c; // value is 0
}

рдпрд╣ рдПрдХ рдРрд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдЬреЛ рдпрд╣ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдирдпрд╛ рдЕрдиреБрдмрдВрдз рдкреБрд░рд╛рдиреЗ рдЕрдиреБрдмрдВрдз рд╕рдВрдЧреНрд░рд╣рдг рдХреЗ рд╕рд╛рде рд╡рд┐рд░реЛрдз рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╡реИрдз рдкреНрд░реЙрдХреНрд╕реА рдЕрдкрдЧреНрд░реЗрдб рд╣реИред

// Checks if "Foo" can be upgraded to "Bar"
const isValid = deployments.isValidProxyUpgrade("Foo", "Bar");

OpenZeppelin рдХрд╛ рдПрдХ рд╕рдорд╛рди рдЪреЗрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрдирдХреЗ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рд╛рд░реНрдбрд╣реИрдЯ-рддреИрдирд╛рддреА рдореЗрдВ рдпрд╣рд╛рдВ рдХреЛрдИ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрдирдХреЗ рд╕рддреНрдпрд╛рдкрди рдХреЛрдб рдХрд╛ рдЕрдзрд┐рдХрддрд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (?)

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

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

рдкреБрд░рд╛рдирд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:

contract Foo { 
  uint public b = 5;
};

рдирдпрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:

// Incorrect
contract Bar { 
  uint public c; // Collision here! - value is actually set to 5 not 0
}

// Correct
contract Bar {
  uint public b; // value is 5 as expected
  uint public c; // value is 0
}

рдпрд╣ рдПрдХ рдРрд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдЬреЛ рдпрд╣ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдирдпрд╛ рдЕрдиреБрдмрдВрдз рдкреБрд░рд╛рдиреЗ рдЕрдиреБрдмрдВрдз рд╕рдВрдЧреНрд░рд╣рдг рдХреЗ рд╕рд╛рде рд╡рд┐рд░реЛрдз рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╡реИрдз рдкреНрд░реЙрдХреНрд╕реА рдЕрдкрдЧреНрд░реЗрдб рд╣реИред

// Checks if "Foo" can be upgraded to "Bar"
const isValid = deployments.isValidProxyUpgrade("Foo", "Bar");

OpenZeppelin рдХрд╛ рдПрдХ рд╕рдорд╛рди рдЪреЗрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрдирдХреЗ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рд╛рд░реНрдбрд╣реИрдЯ-рддреИрдирд╛рддреА рдореЗрдВ рдпрд╣рд╛рдВ рдХреЛрдИ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрдирдХреЗ рд╕рддреНрдпрд╛рдкрди рдХреЛрдб рдХрд╛ рдЕрдзрд┐рдХрддрд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (?)

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЪрд╛рд╣рддрд╛ рдерд╛ :), рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдпрд╣рд╛рдБ рднреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: https://github.com/wighawag/hardhat-deploy/issues/65

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

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

freebyte picture freebyte  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jaypaik picture jaypaik  ┬╖  13рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

smartcontracts picture smartcontracts  ┬╖  20рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jsidorenko picture jsidorenko  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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