рдлрд┐рд▓рд╣рд╛рд▓ рдпрджрд┐ рдЖрдк рдПрдХ рдРрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдкреНрд░реЙрдХреНрд╕реА рдЕрдиреБрдмрдВрдз рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЕрдорд╛рдиреНрдп рд╕рдВрд░рдЪрдирд╛ рд╣реИ рддреЛ рдпрд╣ рдЕрднреА рднреА рд╕рдлрд▓ рд╣реЛрдЧрд╛ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрдиреБрдмрдВрдз рдареАрдХ рддреИрдирд╛рдд рдХрд░реЗрдЧрд╛:
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 рдХрд╛ рдПрдХ рд╕рдорд╛рди рдЪреЗрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрдирдХреЗ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рд╛рд░реНрдбрд╣реИрдЯ-рддреИрдирд╛рддреА рдореЗрдВ рдпрд╣рд╛рдВ рдХреЛрдИ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрдирдХреЗ рд╕рддреНрдпрд╛рдкрди рдХреЛрдб рдХрд╛ рдЕрдзрд┐рдХрддрд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (?)
рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЪрд╛рд╣рддрд╛ рдерд╛ :), рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдпрд╣рд╛рдБ рднреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: https://github.com/wighawag/hardhat-deploy/issues/65
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдпрд╣ рднреА рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдкреНрд░реЙрдХреНрд╕реА рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдореЗрдВ рд╣реИ - рд╕реНрдЯреЛрд░реЗрдЬ рдЯрдХрд░рд╛рд╡ рдЧреИрд░-рддреБрдЪреНрдЫ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЗрд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рдХрдард┐рди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдПрдХ рджреВрд░ рдХреЗ рдмрд┐рдВрджреБ рдкрд░ рдПрдХ рдЙрдиреНрдирдпрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдкреБрд░рд╛рдирд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
рдирдпрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
рдпрд╣ рдПрдХ рдРрд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдЬреЛ рдпрд╣ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдирдпрд╛ рдЕрдиреБрдмрдВрдз рдкреБрд░рд╛рдиреЗ рдЕрдиреБрдмрдВрдз рд╕рдВрдЧреНрд░рд╣рдг рдХреЗ рд╕рд╛рде рд╡рд┐рд░реЛрдз рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╡реИрдз рдкреНрд░реЙрдХреНрд╕реА рдЕрдкрдЧреНрд░реЗрдб рд╣реИред
OpenZeppelin рдХрд╛ рдПрдХ рд╕рдорд╛рди рдЪреЗрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрдирдХреЗ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рд╛рд░реНрдбрд╣реИрдЯ-рддреИрдирд╛рддреА рдореЗрдВ рдпрд╣рд╛рдВ рдХреЛрдИ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрдирдХреЗ рд╕рддреНрдпрд╛рдкрди рдХреЛрдб рдХрд╛ рдЕрдзрд┐рдХрддрд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (?)