ΠΠ° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΠΎΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ ΠΏΡΠΎΠΊΡΠΈ Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ Ρ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠΎΠΉ, ΡΡΠΎ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΡΠΏΠ΅ΡΠ½ΡΠΌ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎΡ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ Π±ΡΠ΄Π΅Ρ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ:
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 ΠΈΠΌΠ΅Π΅Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ, Π½ΠΎ ΠΎΠ½Π° Π²ΡΡΡΠΎΠ΅Π½Π° Π² ΠΈΡ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π·Π΄Π΅ΡΡ Π±Π΅ΡΠΏΠΎΠ»Π΅Π·Π½Π° Π² hardhat-deploy, Ρ ΠΎΡΡ ΠΈΡ ΠΊΠΎΠ΄ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ (?)
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎ Ρ ΠΎΡΠ΅Π» :), ΡΡΠΎ ΡΠΎΠΆΠ΅ Π·Π΄Π΅ΡΡ ΡΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡ: https://github.com/wighawag/hardhat-deploy/issues/65
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
Π’Π°ΠΊΠΆΠ΅ ΡΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΠΊΡΠΈ - ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° Π²ΡΠ·ΡΠ²Π°ΡΡ Π½Π΅ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ. ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΡΠΈ Π² Π΄Π°Π»Π΅ΠΊΠΎΠΌ Π±ΡΠ΄ΡΡΠ΅ΠΌ.
Π‘ΡΠ°ΡΠ°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ:
ΠΠΎΠ²Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ:
ΠΡΠ»ΠΎ Π±Ρ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΈΠΌΠ΅ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΡΡΠΎ Π½ΠΎΠ²ΡΠΉ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ Π½Π΅ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡΠ΅Ρ ΡΠΎ ΡΡΠ°ΡΡΠΌ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΠΌ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠΎΠ² ΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΠΊΡΠΈ.
OpenZeppelin ΠΈΠΌΠ΅Π΅Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ, Π½ΠΎ ΠΎΠ½Π° Π²ΡΡΡΠΎΠ΅Π½Π° Π² ΠΈΡ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π·Π΄Π΅ΡΡ Π±Π΅ΡΠΏΠΎΠ»Π΅Π·Π½Π° Π² hardhat-deploy, Ρ ΠΎΡΡ ΠΈΡ ΠΊΠΎΠ΄ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ (?)