openzeppelin SDK를 사용해서 solidity를 upgradable하게 작성하는 방법이 있다.
기존 truffle환경에서 추가할 부분은..
1. npm install -g @openzeppelin/cli
2. Contract 코드 작성
import "@openzeppelin/upgrades/contracts/Initializable.sol";
contract Logic is Initializable {
function initialize() public initializer {
//생성자없이 여기서 필요한 변수 초기화.
}
//기타 필요 변수/함수 작성
}
3. oz init . (truffle 환경에서 실행) -> .openzeppelin/project.json 생성
4. oz compile (이 때, upgradable 하고싶은 contract 만 contracts 밑에 있는게 편함)
5. oz create Logic --network beta --init --args 50000
>>> create되면, build/contracts/Logic.json이 기존 truffle 수준으로 생성됨. => 이걸 이용해 서비스.
=== 여기까지 proxy 1차 배포 완료 ====> 3~5과정을 다시하고 싶으면 .openzeppelin 폴더 제거 후 진행. rm -rf ./build도 하는게 좋음.
6 test
truffle console --network beta
let abi = require("./build/contracts/Logic.json").abi
let contract = new web3.eth.Contract(abi, "your-proxy-address")
contract.methods.getMaxDeposit().call();
===Upgrade
1. Logic.sol 제일 뒷부분에 getV2MaxDeposit() 함수 추가.
2. $oz push --network beta
=> Logic을 space바 로 select
3. $oz update Logic --network beta
>>> update되면, build/contracts/Logic.json이 기존 truffle 수준으로 update됨. => 이걸 이용해 서비스.
4. test
truffle console --network beta
let abi = require("./build/contracts/Logic.json").abi
let contract = new web3.eth.Contract(abi, "previous-proxy-address")
contract.methods.getV2MaxDeposit().call();