Hardhat-deploy: ν”„λ‘μ‹œ κ³„μ•½μ—λŠ” μΌμ’…μ˜ μœ νš¨μ„± 검사가 ν•„μš”ν•©λ‹ˆλ‹€.

에 λ§Œλ“  2021λ…„ 06μ›” 24일  Β·  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μ—λŠ” λΉ„μŠ·ν•œ 검사가 μžˆμ§€λ§Œ 배포 κΈ°λŠ₯에 λ‚΄μž₯λ˜μ–΄ μžˆμœΌλ―€λ‘œ 확인 μ½”λ“œλ₯Ό λŒ€λΆ€λΆ„ μž¬μ‚¬μš©ν•  수 μžˆμ§€λ§Œ μ—¬κΈ°μ—μ„œλŠ” hardhat-deployμ—μ„œ μ‚¬μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λͺ¨λ“  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μ—λŠ” λΉ„μŠ·ν•œ 검사가 μžˆμ§€λ§Œ 배포 κΈ°λŠ₯에 λ‚΄μž₯λ˜μ–΄ μžˆμœΌλ―€λ‘œ 확인 μ½”λ“œλ₯Ό λŒ€λΆ€λΆ„ μž¬μ‚¬μš©ν•  수 μžˆμ§€λ§Œ μ—¬κΈ°μ—μ„œλŠ” hardhat-deployμ—μ„œ μ‚¬μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

ν™•μ‹€νžˆ μ›ν–ˆμŠ΅λ‹ˆλ‹€ :), 이것은 λ˜ν•œ 여기에 μ–ΈκΈ‰λ˜μ—ˆμŠ΅λ‹ˆλ‹€ : https://github.com/wighawag/hardhat-deploy/issues/65

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰